zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【jvm我能讲两小时045】什么是jvm的安全点?

JVM安全 什么 小时 我能
2023-09-27 14:29:28 时间

什么是jvm的安全点?

在OopMap的协助下, HotSpot可以快速准确地完成GC Roots枚举, 但一个很现实的问题随之而来: 可能导致引用关 系变化, 或者说导致OopMap内容变化的指令非常多, 如果为每一条指令都生成对应的OopMap, 那将会需要大量的 额外存储空间, 这样垃圾收集伴随而来的空间成本就会变得无法忍受的高昂。

实际上HotSpot也的确没有为每条指令都生成OopMap, 只是在“特定的位置”记录了这些信息, 这些位置被称为安全 点 (Safepoint) 。 有了安全点的设定, 也就决定了用户程序执行时并非在代码指令流的任意位置都能够停顿下来开 始垃圾收集, 而是强制要求必须执行到达安全点后才能够暂停 。 因此, 安全点的选定既不能太少以至于让收集器等待 时间过长, 也不能太过频繁以至于过分增大运行时的内存负荷 。 安全点位置的选取基本上是以“是否具有让程序长时 间执行的特征”为标准进行选定的, 因为每条指令执行的时间都非常短暂, 程序不太可能因为指令流长度太长这样的 原因而长时间执行,“长时间执行”的最明显特征就是指令序列的复用, 例如方法调用、循环跳转、异常跳转等都属于 指令序列复用, 所以只有具有这些功能的指令才会产生安全点。