gpt4 book ai didi

java - 次要和主要 GC 周期

转载 作者:行者123 更新时间:2023-12-01 23:11:51 33 4
gpt4 key购买 nike

据我所知,Java GC有次要GC(低成本)和主要GC周期(高成本)。如果对象在本地范围内,则会在 Minor GC 中清理它。如果对象的引用存储在代码中的其他位置,则它会在主 GC 中被清除。
例如

void f() {
A a = new A();
a.doSomething();
}

根据我的描述(当然如果这是真的)对象a在minor GC中被清理了。那又怎么样

void f() {
A a = new A();
B b = new B();
b.doSomething(a);
}

这里对象 a 作为参数传递给 B 的 doSomething 方法,也许 B 将引用存储在 B 本身中,但我们不知道。那么,对象a会在minor GC还是major GC中被清除?

最佳答案

仅通过查看代码是无法判断的。GC 将根据需求运行,并且 GC 的频率会因程序和环境的每次运行而异。GC 周期(以及 JVM 实现)的频率将决定对象是在仍处于 Young 代时被收集,还是被提升到 Old 代。在老一代中,对象仍然可以在“并发”阶段被收集(取决于收集器),而不一定是在 Full stop-the-world GC 期间收集。

这可以让您很好地了解整个过程:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

此外,这是一篇很好的文章,可以帮助您了解 Minor、Major 和 Full GC 之间的差异:https://plumbr.io/blog/garbage-collection/minor-gc-vs-major-gc-vs-full-gc

关于java - 次要和主要 GC 周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372105/

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