当前位置: 首页 > 网络应用技术

JVM实施原理分析的安全点

时间:2023-03-06 00:08:29 网络应用技术

  SafePoint也被称为安全点。这是JVM和其他JVM的重要概念。BELOW我们了解SafePoint是什么,Safepoint的作用,如何实现SafePoint以及作为开发人员关注的地方。

  JVM的主要任务是执行Java程序,JVM也是运行时的程序,但是仍然有许多辅助任务以执行Java程序JVM,例如GC和JIT编译。通常称为突变器。

  以GC为例,JVM中的常规GC使用可访问性分析,也就是说,从某些GC根(例如运行时线程堆栈方法的方法,本地变量表,操作号码表中的参考)和操作表,和静态变量引用等)通过参考启动参考图。如果突变器在JVM的遍历期间也在运行,则突变器可以修改该对象图的参考关系。结果,某些不可恢复的对象尚未传播,并且它们被标记为垃圾对象,并且是错误的。

  如果您想完成GC,则JVM的实施成本将相对较大,并且在许多情况下,总体吞吐量将减少(使用CASAMIC操作以及协会编程中的并发编程中的锁定,如果竞争更多,则强烈,锁更有效,因为可以减少CAS周期的CPU消耗)

  因此,许多GC收藏家将有一些停止的阶段。此StopTheWorld是SafePoint。在SafePoint中没有突变器操作对象,并且线程堆栈和堆中每个位置中的数据类型也确定(例如8位数据是长还是对象引用)。

  线程要么在SafePoint中,要么不在SafePoint中。指全球安全点。

  SafePoint是热点实施方面的协作。当JVM需要突变器进入SafePoint时,将设置一个状态标记以指示您要输入SafePoint。t检查它的时间太长。在顺序中,如果有线程,它将影响其他线程而无需检查safepoint,毕竟,其他线程正在等待)。如果是编译代码(JIT编译的代码),JIT将会在某些地方插入检查代码,例如该方法调用回报和周期。如果被解释为代码,JVM有两个要发布的字节字节。如果您需要输入SafePoint,JVM将切换到SafePoint状态检查的子出版物。

  为了最大程度地减少开销,Hotspot中SafePoint状态检查的实现方法是读取存储器值。如果您需要输入SafePoint,请设置此内存页面要受到保护,这将触发页面故障,然后您可以使用异常来通过异常。处理为safepoint。此方法比准确读取记忆值(例如布尔数据)(因为内存同步)。

  执行JNI代码时,该线程也处于SafePoint中,而其他“阻止”状态也在SafePoint中。例如,螺纹。sleep,如果要退出线程,则需要退出SafePoint。线程在输入SafePoint后突然运行。

  除某些GC阶段外,SafePoint中还需要其他常见操作。

  在JVM启动参数中添加一些参数,以打印应用程序和SafePoint相关信息的应用程序。如果版本<=jdk8

  如果版本>JDK8

  一个例子

  这表明该应用程序线程运行1.0038747秒,因为ThreadDump开始输入SafePoint,因此应用程序线程已悬挂为0.0017502秒,并且暂停为0.0000312秒。