gpt4 book ai didi

java - 了解引用带宽

转载 作者:行者123 更新时间:2023-12-01 16:52:31 26 4
gpt4 key购买 nike

我正在读 Richard Warburton 写的一本关于 java 8 的书。在关于原语流的部分中,作者给出了一些关于原语与引用的解释(强调我的):

For algorithms that perform lots of numerical operations, the cost of boxing an unboxing combined with the additional memory bandwidth used by allocated boxed objects can make the code significantly slower.

带宽是多少?是否认为对于原语我们在内存中拥有它们的实际值并且可以直接使用它们。

对于引用,我们依次使用指向堆的指针,并在某个对象上调用方法,我们必须通过给定的指针执行间接寻址,然后才能调用该方法。这被认为是带宽吗?

我们真的需要担心实际中的带宽吗?

最佳答案

现实的计算机从内存中检索字节/字的速度是有限的,从 CPU 缓存读取的速度较快,从不在 L1/L2/L3/中的内存读取的速度较慢。 ...缓存。

当我们处理大型基元/装箱流时,我们可以假设 CPU 缓存中没有集合的元素,并且需要从主内存中获取它们。

在适用于 OpenJDK 的总体过度简化中,内存中的对象将包含对其 java.lang.Class 的引用。及其所有父类(super class)(用于检查强制转换和相关),后跟其字段。这可能相当大,例如盒装 java.lang.Integer它可能需要维护对 Class<Integer> 的引用。和Class<Number> 。不用说,这比原语所需的 32 位大得多。

当一个人正在迭代/流式传输 Integer 的集合时s,需要将这些对象加载到内存中,而对于元素的简单数值运算,内存成为瓶颈。

关于java - 了解引用带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com