JVM
新手路上的程序员
这个作者很懒,什么都没留下…
展开
-
JVM 一
1.运行时数据区域1.1程序计数器程序计数器是每一个线程都拥有的,里面保存的是当前线程执行的字节码的行号指示器。简单的说就是当前线程执行到代码的哪一行。在多线程的环境中,线程是轮流使用CPU的,所以线程需要一个保存当前执行的状态,当再次拥有CPU时,当保存状态往下执行。如果线程正在执行java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址。如果正在执行的N...原创 2018-03-26 19:06:13 · 185 阅读 · 0 评论 -
JVM 二
上一章写了一下jvm的分区,和对象的初始化操作,这篇主要说一下GC算法。说到GC那么首先想到的就是对象(堆),一个死亡的对象,那么GC是如何确定一个对象已经死了的。1.引用计数算法通过对象的引用计数器来判断对象是否可回收,每当有一个地方引用的时候,计数器就会+1,当引用失效时,计数器就会-1,如果计数器为0则代表这个对象可以回收,但是在大多的JVM都没有选用这个算...原创 2018-03-28 13:05:33 · 203 阅读 · 0 评论 -
JVM 三
一.对象是如何被访问的在Java本地变量表也就是栈中的局部变量表(栈 在Hotspot中将本地方法栈和java虚拟机栈合二为一 )中会有reference数据来操作堆上的对象实例。主流有两种访问方式 句柄和直接指针1.句柄 需要维护一个句柄池 通过reference指向句柄然后通过句柄指向对象实例数据的指针和对象类信息的指针2.直接地址访问 此时reference直接指向堆中具体的...原创 2019-08-11 21:56:20 · 85 阅读 · 0 评论 -
JVM 四
一:java堆出现OOM1.内存泄漏:通过工具查看泄漏对象的GC Root 。可以找到泄漏对象是通过怎样的路径和GC Root关联导致垃圾收集器无法自动回收。掌握 了泄露对象的类型信息及GC Roots引用链的信息,就可以比较准确地定位出泄露代码的位 置。2.如果不是内存泄漏那么就是对象都必须存活,就应当检查虚 拟机的堆参数(-Xmx与-Xms)与机器物理内存对比看是否还可以调大,从代码上检查...原创 2019-08-11 21:56:48 · 136 阅读 · 0 评论