【发布时间】:2011-12-14 03:57:17
【问题描述】:
(这篇文章是关于高频类型编程的)
我最近在一个论坛上看到(我认为他们正在讨论 Java),如果您必须解析大量字符串数据,最好使用字节数组而不是带有 split() 的字符串。确切的帖子是:
使用任何语言、C++、Java、C# 的一个性能技巧是 避免创建对象。这不是分配或 GC 的成本,它的 访问不适合 CPU 缓存的大型内存阵列的成本。
现代 CPU 比内存快得多。他们为许多人停滞不前, 每个缓存未命中的许多周期。大多数 CPU 晶体管预算是 分配以通过大型缓存和大量滴答声来减少这种情况。
GPU 通过准备大量线程来解决问题 执行以隐藏内存访问延迟并且几乎没有缓存和 将晶体管花在更多内核上。
因此,例如,而不是使用字符串和拆分来解析 消息,使用可以就地更新的字节数组。你真的想要 避免对大型数据结构的随机内存访问,至少在 内部循环。
他只是说“不要使用字符串,因为它们是一个对象并且创建对象的成本很高”?还是他在说别的?
使用字节数组能否确保数据尽可能长时间地保留在缓存中? 当您使用字符串时,它是否太大而无法保存在 CPU 缓存中? 一般来说,使用原始数据类型是编写更快代码的最佳方法吗?
【问题讨论】: