gpt4 book ai didi

Java内存碎片和大数组的分配

转载 作者:搜寻专家 更新时间:2023-11-01 03:12:12 24 4
gpt4 key购买 nike

我正在考虑将 Timer 类用于大量 TimerTask(比如一两百万)。 Timer 的堆实现是基于数组的,既然没有办法为数组预留空间,那么问题来了,当内存碎片化时,Java 如何处理大的连续内存块(在本例中为数组)的分配?

如果没有足够大的可用片段,是否总是会抛出 OutOfMemoryError?或者当可用内存总量足够时,我可以期望 JVM 有某种内存碎片整理策略吗?

编辑:看来我的问题没有独立于 JVM 实现的答案。在我的例子中,JVM 实现是 OpenJDK 版本 14.0-b16(根据 java.vm.name 和 java.vm.version 系统属性)。

最佳答案

首先,这不是由 Java 语言规范定义的,因此您将获得的任何具体答案都将取决于实现。我什至不相信虚拟机规范中定义了它。

事实上,我建议您将问题缩小到特定的 JVM 实现

Will an OutOfMemoryError always be thrown if there is no fragment available big enough? Or can I expect the JVM to have some kind of memory de-fragmentation strategy when the total amount of free memory is enough?

由于 Java 隐藏了它可以执行的实际内存地址 memory compaction随意。所以是的,您可以期望它具有内存碎片整理策略。 (请记住,您的操作系统可能会为 JVM 提供虚拟内存,因此在您的应用程序和物理地址之间还有另一层。)

关于Java内存碎片和大数组的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791800/

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