网站地图    收藏   

主页 > 后端 > java >

JVM系列之:再谈java中的safepoint说明

来源:自学PHP网    时间:2020-09-25 15:59 作者:小飞侠 阅读:

[导读] JVM系列之:再谈java中的safepoint说明...

今天带来JVM系列之:再谈java中的safepoint说明教程详解

safepoint是什么

java程序里面有很多很多的java线程,每个java线程又有自己的stack,并且共享了heap。这些线程一直运行呀运行,不断对stack和heap进行操作。

这个时候如果JVM需要对stack和heap做一些操作该怎么办呢?

比如JVM要进行GC操作,或者要做heap dump等等,这时候如果线程都在对stack或者heap进行修改,那么将不是一个稳定的状态。GC直接在这种情况下操作stack或者heap,会导致线程的异常。

怎么处理呢?

这个时候safepoint就出场了。

safepoint就是一个安全点,所有的线程执行到安全点的时候就会去检查是否需要执行safepoint操作,如果需要执行,那么所有的线程都将会等待,直到所有的线程进入safepoint。

然后JVM执行相应的操作之后,所有的线程再恢复执行。

safepoint的例子

我们举个例子,一般safepoint比如容易出现在循环遍历的情况,还是使用我们之前做null测试用的例子:

public class TestNull {

 public static void main(String[] args) throws InterruptedException {
  List list= new ArrayList();
 list.add("www.flydean.com");
  for (int i = 0; i < 10000; i++)
  {
   testMethod(list);
  }
  Thread.sleep(1000);
 }

 private static void testMethod(List list)
 {
  list.get(0);
 }
}

运行结果如下:

Java优化for循环嵌套的高效率方法
下一篇:Java实现ip地址和int数字的相互转换

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论