GC Safepoint
- 如果要触发一次GC,那么JVM中所有Java线程都必须到达安全点(Safepoint)或者安全区域(SafeRegion)
- 只有GC Safepoint是不足的,因为我们发现,有一种情况:线程处于阻塞或等待状态,此时线程无法响应JVM的中断请求,也无法去轮询标志位
- JVM只会在特定位置放置safepoint,比如:
- 内存分配的地方(allocation,即new一个新对象的时候)
- 长时间执行区块结束的时刻(如方法调用,循环跳转等)
- 之所以只在特定的位置放置safepoint,是因为OopMap要占用空间,如果设太多safepoint那么占用空间会太大;
- HotSpot JVM在通过JIT编译时,会在所有方法返回之前以及循环跳转、异常跳转之前放置
Safepoint
,并且在每个Safepoint
都生成一些信息存储哪些地方是引用(OopMap),以便JVM能找到需要的引用。
你要是觉得写的还不错,就点个关注,可以评论区留下足迹,以后方便查看.
你要是觉得写的很辣鸡,评论区欢迎来对线!
欢迎转载!