
JVM
文章平均质量分 65
SummerMangoZz
菲fans
展开
-
jvm内存模型浅析
首先要说明的是,jvm的结构相当复杂且不同的jvm还有不同的实现,我这里仅仅是根据相关书籍做个简单的分析。 要了解java中对象和变量(静态变量,实例变量,局部变量)究竟在哪里进行创建以及内存分配,就必须先大概了解一下jvm的内存模型。如图: 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。由于每个线程执行原创 2017-03-03 16:20:56 · 425 阅读 · 0 评论 -
jvm的GC机制和四大引用类别
首先讲讲gc机制。很多人在面试中被问到jvm的gc机制,都会自然而然地回答为引用计数法。在我们一些常见的虚拟机中,比如python的虚拟机,的确是采用引用计数法来标记垃圾对象的,但在主流的jvm中,采用的是另一机制,可达性分析。可达性分析将所有对象及其引用关系看作一个图结构,从某个节点(GCroot节点)到某个节点是联通的,我们就说这个对象是活的,反之,就是需要被回收的对象。 根据深入理解jvm原创 2017-04-14 20:46:16 · 1150 阅读 · 0 评论 -
jvm堆内存分代
jvm堆内存中,大概可分为新生代,老年代,永久代(以前可以看作是方法区),由于现在的jvm已经去永久代了,所以实质上只有前两种 1.新生代 : 新生代又分为eden区域和两个survivor区域。默认大小比例为8:1. 大部分新生成的对象都直接分配在eden中,如果在新生代中执行一次gc,eden中 未被回收的对象就会进入survivor区域中,同时对象的年龄+1,经过多次gc后,如果原创 2017-04-15 15:40:22 · 648 阅读 · 0 评论 -
类加载过程详解
类加载总共有三个阶段:加载 -> 连接(验证 -> 准备 -> 解析) -> 初始化。 java虚拟机规范并没有对何时适合进行加载操作进行详细的规定。但对于初始化阶段,虚拟机严格规定了5中情况下会开始初始化操作(那么加载,连接操作必然会先进行): 1.遇到new, getstatic, putstatic 或者invokestatic. 这三条指令分别对应使用new关键字实例化一个对象,读取原创 2017-06-30 13:52:41 · 492 阅读 · 2 评论