字符串与字节数组,性能
(这篇文章是关于高频类型编程的)
我最近在一个论坛上看到(我认为他们正在讨论Java),如果你必须解析大量的字符串数据,那么使用字节数组比使用带有split()的字符串更好。确切的帖子是:
使用任何语言(C++,Java,C#)的一个性能技巧是避免创建对象。这不是分配或GC的成本,而是访问不适合CPU缓存的大型内存阵列的成本。
现代CPU比他们的内存快得多。它们会为每个缓存未命中停顿很多很多个周期。大部分 CPU 事务器预算用于通过大型缓存和大量刻度来减少这种情况。
GPU通过准备执行大量线程来隐藏内存访问延迟,并且很少或没有缓存并将晶体管花费在更多内核上,从而以不同的方式解决了这个问题。
因此,例如,与其使用 String 和 split 来解析消息,不如使用可以就地更新的字节数组。您确实希望避免对大型数据结构的随机内存访问,至少在内部循环中是这样。
他只是在说“不要使用字符串,因为它们是一个对象,创建对象是昂贵的”?还是他在说别的什么?
使用字节数组是否确保数据尽可能长时间地保留在缓存中?当您使用字符串时,它是否太大而无法保存在CPU缓存中?通常,使用基元数据类型是编写更快代码的最佳方法吗?