Java零分配

Java零分配,java,memory,memory-management,Java,Memory,Memory Management,我曾多次遇到过“零分配”这个词,我正在寻找关于这个问题的一些澄清 当提到“零分配”时,它指的是使用很少分配的程序还是在启动时分配所有的程序?因为在我看来,在一个非平凡的程序中根本不分配对象是不可行的,但我可能错了 另一方面,使用堆外内存是否也被视为“零分配”,在本例中,“零分配”意味着没有分配给垃圾收集器处理的内存 我第一次在本演示的上下文中了解到这一点:,大约15:35。如果您有一个非常紧密的热循环(即一个在很短的时间内一次运行数千次甚至数百万次的循环),那么将分配移到循环之外是有意义的 十年

我曾多次遇到过“零分配”这个词,我正在寻找关于这个问题的一些澄清

当提到“零分配”时,它指的是使用很少分配的程序还是在启动时分配所有的程序?因为在我看来,在一个非平凡的程序中根本不分配对象是不可行的,但我可能错了

另一方面,使用堆外内存是否也被视为“零分配”,在本例中,“零分配”意味着没有分配给垃圾收集器处理的内存


我第一次在本演示的上下文中了解到这一点:,大约15:35。

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

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

我们很快意识到我们应该避免对象分配(以及由此产生的垃圾收集)。我们在循环中使用零分配方法解决了这个问题。怎么做

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

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


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

零分配通常只指程序的一部分,而不是整个程序,并且可以使程序的关键部分(例如)完全不分配。这个问题位于谷歌首页的关键字“java零分配”。这是一个关于编程的清晰而简洁的问题。