gpt4 book ai didi

java - JVM 中的确定性垃圾回收

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:18 25 4
gpt4 key购买 nike

我想知道是否存在热点 JVM 或任何其他 JVM 可以确定性地进行垃圾收集的实例。我知道逃逸分析,但想知道它是否也适用于堆分配的对象。我的意思是在像这样的 C++ 代码中给出堆外的确定性垃圾收集

#include <vector>
int main(int argc, char*argv[]){
std::vector<double> v_somevector;
} // std::vector::~vector() is called determinitically

当然在 Java 中是这样的

.
.
.
private double ma() throws Exception{
double result = 0.0;
final double[] closes = new double[100000];
//perform some calculation using the closes array above
return result;
} // At this point why shouldn't closes be deterministically garbage collected (as in immediately)?

在垃圾收集关闭数组时应该是确定性的。看起来,逃逸分析似乎侧重于在堆栈上分配 closes 数组的可能性,但即使在堆上分配,在这种情况下,我不明白为什么它不能在离开 ma() 时被收集范围

最佳答案

当然可以; Java规范不禁止它。它只是将垃圾收集的问题完全留给了实现。 JVM 甚至根本不需要实现垃圾收集!

原因很简单,JVM 可以使用许多技术,这些技术在概率上比您正在谈论的那种同步分​​配更有效,例如分代堆和并发标记和清除。您可以在自己的 VM 中自由实现您正在谈论的那种逻辑,但分析表明,对于许多业务类型的工作负载,C++ 程序中的大部分 CPU 使用率都被构造和破坏所占用对象的数量以及分代堆等方法简化了大量内存管理。

关于java - JVM 中的确定性垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329285/

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