设为首页 加入收藏

TOP

Java 工具(jmap,jstack)在Linux上的源码分析(四)safe point
2014-11-24 14:36:59 来源: 作者: 【 】 浏览:1
Tags:Java 工具 jmap jstack Linux 源码 分析 safe point

safe point 顾明思意,就是安全点,当需要jvm做一些操作的时候,需要把当前正在运行的线程进入一个安全点的状态(也可以说停止状态),这样才能做一些安全的操作,比如线程的dump,堆栈的信息。


在jvm里面通常vm_thread(我们一直在谈论的做一些属于vm 份内事情的线程) 和cms_thread(内存回收的线程)做的操作,是需要将其他的线程通过调用SafepointSynchronize::begin 和 SafepointSynchronize:end来实现让其他的线程进入或者退出safe point 的状态。


相关链接:


通常safepoint 的有三种状态




通常在java 进程中的Java 的线程有几个不同的状态,如何让这些线程进入safepoint 的状态中,jvm是采用不同的方式


a. 正在解释执行


由于java是解释性语言,而线程在解释java 字节码的时候,需要dispatch table,记录方法地址进行跳转的,那么这样让线程进入停止状态就比较容易了,只要替换掉dispatch table 就可以了,让线程知道当前进入softpoint 状态。


java里会设置3个DispatchTable, _active_table, _normal_table, _safept_table


_active_table 正在解释运行的线程使用的dispatch table


_normal_table 就是正常运行的初始化的dispatch table


_safept_table safe point需要的dispatch table


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JVM Thread stop 的源码分析 下一篇Java6 的类反射瓶颈

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: