gpt4 book ai didi

Java GC 安全点

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:15 26 4
gpt4 key购买 nike

当垃圾收集器在清理未引用的对象之前卡住应用程序线程时,所有线程在执行时都需要处于“安全点”。我发现了大量描述安全点概念的文章,但例子却很少。安全点将放置在典型 Java 方法中的什么位置?为什么?更重要的是,哪里不会出现安全点?

最佳答案

安全点的确切定义和实现因一种虚拟机实现而异,但考虑到热点虚拟机,您可以在:Safepoints in HotSpot JVM中找到一个很好的定义。 .

HotSpot glossary说:

A point during program execution at which all GC roots are known and all heap object contents are consistent. From a global point of view, all threads must block at a safepoint before the GC can run.

通常,安全点是通过 JVM 将安全点检查注入(inject)到方法中来实现的,大多数调用站点都符合安全点的资格 - 当到达安全点检查时,线程将检查是否需要安全点(例如调度 FullGC),如果是的话,然后线程阻塞。当VM中的所有线程都阻塞时,您就达到了VM中所有对象都可以完全访问的安全点。然后,执行请求安全点的 VM 操作(例如 FullGC),之后恢复线程。

检查需要安全点的虚拟机操作列表:Safety First: Safepoints .

您可以使用-XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1来研究Hotspot中的安全点行为

关于Java GC 安全点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24258341/

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