Java 安全点是 JVM 暂停线程执行垃圾回收的特定时刻,以确保应用程序状态稳定,减少暂停时间。安全点通常位于方法调用、循环和同步块边界。JVM 发送请求后,线程会在最近的安全点暂停,然后 JVM 进行垃圾回收,线程在回收完成后继续执行。优化措施包括:增量式垃圾收集、并发标记扫描和偏向锁,这些措施可降低暂停时间,避免影响应用程序执行。

Java 安全点
Java 安全点是指 Java 虚拟机(JVM)暂停所有应用程序线程以执行垃圾回收的特定时刻。
安全点的作用
- 允许 JVM 在应用程序运行时进行垃圾回收
- 确保垃圾收集期间应用程序的执行状态不会改变
- 减少应用程序暂停时间
安全点的位置
立即学习“Java免费学习笔记(深入)”;
安全点通常位于以下场景:
weiit-saas是一款Java开源项目,由weiit团队自研,意在通过技术封装,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。weiit-saas是完全开源电商SaaS系统,属于weiit开源的社区版,旧版已不在维护和更新,仅供学习和参考,新版saas从底层架构到前后端UI设计已经全面优化和升级。 主要特点1、项目采用Spring+SpringMVC+Mybatis主流开源框架
- 方法调用边界:当一个线程调用另一个方法时,在方法调用之前和之后都会插入安全点。
- 循环边界:当一个线程进入或退出循环时,会插入安全点。
- 同步块边界:当一个线程进入或退出同步块时,会插入安全点。
安全点机制
当 JVM 准备进行垃圾回收时:
- 它会发送一个安全点请求给所有应用程序线程。
- 所有线程在到达最近的安全点后都会停止执行。
- JVM 执行垃圾回收。
- 应用程序线程在垃圾回收完成后继续执行。
优化安全点
为了减少应用程序暂停时间,JVM 可以通过以下方式优化安全点:
- 增量式垃圾收集:将垃圾回收过程分解为较小的增量,从而降低单个安全点的暂停时间。
- 并发标记扫描:在应用程序执行的同时执行垃圾回收标记阶段,从而减少应用程序暂停时间。
- 偏向锁:避免竞争较低的锁的同步,从而減少安全点等待时间。










