编辑
2023-11-08
后端
00
请注意,本文编写于 549 天前,最后修改于 549 天前,其中某些信息可能已经过时。

目录

safepoint是什么?

safepoint是什么?

safepoint(安全点)是Java虚拟机(JVM)中的一个重要概念。它是在代码执行过程中的特定位置,当线程执行到这些位置时,可以暂停线程并进行一些特定操作。safepoint的作用是确保线程在特定位置时,其状态信息是确定的,并且可以进行一些需要全局线程同步的操作,例如垃圾回收(GC)和方法即时编译优化。

safepoint的作用:

  • GC操作:当需要进行垃圾回收时,需要知道哪些对象仍在使用或可以回收。safepoint提供了一个全局同步点,使所有线程都暂停,以便进行垃圾回收操作。
  • 偏向锁解除:在高并发情况下,当需要解除偏向锁时,需要线程状态和获取锁的线程的精确信息。safepoint提供了一个同步点,使线程可以暂停并解除偏向锁。
  • 方法即时编译优化:JVM可以对方法进行即时编译优化,以提高执行效率。safepoint提供了一个同步点,使线程可以暂停并进行优化操作。

safepoint的实现方式:

  • Polling(轮询):JVM可以在代码的特定位置插入轮询点,当线程执行到这些点时,主动检查是否需要进入safepoint。这种方式会有一定的性能损耗,因此JIT编译器会尽量减少safepoint的插入。
  • JIT编译优化:经过JIT编译优化的代码会在方法返回之前或非counted loop的循环回跳之前插入safepoint。对于明确有界循环,为了减少safepoint的插入,不会在回跳之前插入safepoint。

需要注意的地方:

  • safepoint的存在会导致所有线程暂停,这种情况被称为"Stop The World"。在某些情况下,需要全局所有线程进入safepoint,以便进行全局操作,如GC、代码清理等。
  • safepoint的插入会对性能产生一定的影响,因此JIT编译器会尽量减少safepoint的插入,以提高程序的执行效率。

Learn more:

  1. SafePoint是什么转载 - CSDN博客
  2. 每日一面 - 什么是 Safepoint?-腾讯云开发者社区-腾讯云
  3. JVM实现原理分析之safepoint - 掘金

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!