jvm学习笔记
qq_43633220
普通的大学生
展开
-
Hotspot中的垃圾回收
安全点与安全区域 hotspot中进行垃圾回收的根节点枚举这一步时必须要求暂停所有用户线程,设置了一些特定位置表示当程序运行到这一步时,可以暂停来进行垃圾回收。同时程序也是在安全点来记录OopMap。 HotSpot使用主动式抢断来中断线程,即在需要进行垃圾回收时设置一个标志位,程序运行时回查询这个标志,当标志位设置位真时就会运行到最近的安全点主动中断。查询标志位的时机除了所有安全点的位置还包括创建对象和其他需要在堆上分配内存的地方(检查是否要发生垃圾收集,避免内存不足) 查询标志位的具体操作为:使用tes原创 2020-10-18 16:12:09 · 144 阅读 · 0 评论 -
java垃圾收集器基本知识
判读对象是否存活 引用计数法: 为每个对象添加一个引用计数器,每此被引用时计数器加一,解除引用计数器减一,计数器为零时确定不可能被使用。引用计数法实现简单高效,但简单的使用该方法无法解决一些问题。例如:当两个对象互相引用时计数器就永远无法归零 可达分析算法: 将对象作为一个图的节点,对象间的引用为图的边,确定一些被称作**“GC ROOTS”**的根节点作为起始,遍历整个图,所有不可达的节点的对象视为以死亡的对象。主流的商用程序语言的都是通过可达性分析来判断对象是否存活。 引用: JDK1.2以后java中原创 2020-10-15 16:49:17 · 116 阅读 · 0 评论 -
HotSpot虚拟机中的对象
对象的创建 开始创建 在虚拟机遇见字节码的new指令时,会根据指令的参数定位到常量池的中的符号引用,并检查这个符号所代表的类是否被加载过。如果未被加载则先执行类的加载过程。 分配空间 分配空间的方式取决于垃圾收集器是否具有空间压缩整理能力。 如果垃圾收集器具有空间压缩整理能力,则java堆中的可用空间是连续的,只需要挪动标记已使用空间界限的指针,这种方法叫做“指针碰撞”。 如果垃圾收集器不具备空间压缩整理能力。例如基于标记清除算法的CMS收集器,大多是情况下就无法使用“指针碰撞”,就需要虚拟机维护一原创 2020-10-13 12:09:26 · 108 阅读 · 0 评论 -
java内存区域
程序计数器 可以看作当前线程所执行的字节码的行号指示器,它是用于控制程序流的指示器,每个线程都有一个独立的程序计数器。 如果程序正在执行java方法则程序计数器中的值为执行的字节码指令的地址,执行本地方法则值为空,所占内存空间较小,且在《Java虚拟机规范》没有任何OutOfMemoryError的情况。 java虚拟机栈 方法被执行的时候,java虚拟机会创建一个栈帧,用于存储局部变量表,操作数栈,动态连接,方法出口等信息。(暂时还不知道 操作数栈和动态连接是什么) 局部变量表存放编译期间就可知的Jav原创 2020-09-28 16:06:14 · 158 阅读 · 0 评论