gpt4 book ai didi

Java 零分配

转载 作者:行者123 更新时间:2023-12-02 04:12:34 28 4
gpt4 key购买 nike

我多次遇到“零分配”这个术语,并且我正在寻找有关该主题的一些澄清。

当提到“零分配”时,它是指使用很少分配或在启动时分配所有内容的程序吗?因为在我看来,在一个重要的程序中根本不分配任何对象是不可行的,但我可能是错的。

另一方面,使用堆外内存是否也被视为“零分配”,在这种情况下,“零分配”意味着没有分配内存供垃圾收集器处理?

我第一次听说这个是在本演示文稿中:http://www.infoq.com/presentations/panel-java-performance ,15:35 左右。

最佳答案

如果您有一个非常紧且热的循环(即在很短的时间内运行数千甚至数百万次的循环),那么将分配移到循环之外是有意义的。

十年前我用Java写了一个模拟。循环中正在操作一个对象列表。该循环每秒运行 30 次,应在 30 毫秒内完成,并且可操作多达 50000 个对象。一个困难是在循环迭代中创建和删除对象。

我们很快意识到我们应该避免对象分配(从而避免垃圾回收)。我们通过循环内的零分配方法解决了这个问题。怎么办?

我们用享元对象数组替换了列表。包含五万个对象的数组是在循环开始之前分配的。第二个技巧是使用蝇量模式的变体。我们没有在循环中删除和创建对象,而是从五万个预先分配的对象开始,并添加一个标志来将它们标记为“Activity ”或“非 Activity ”。每当我们想要删除一个对象时,我们都会将其标记为不活动。有很多这样的小技巧可以避免分配。

这很有帮助!模拟能够实时运行,并且没有垃圾收集抖动(由于主要垃圾收集运行而导致帧速率突然下降)。

这是一个小例子,向您展示零分配如何工作以及为什么它是必要的。

关于Java 零分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656936/

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