JVM的学习

一、 JVM内存区域

   1. 程序计数器(PC 寄存器):一块较小的内存空间,是当前线程所执行的字节码的行号指示器,循环、跳转、线程恢复等通过它来完成 

——(唯一一个不会出现OutOfMemoryError的内存区域)

 

   2. 虚拟机栈:也叫栈内存,在线程创建时创建,线程结束时栈内存释放。每个方法被调用直到执行完毕的过程,对应帧栈在虚拟机栈的入栈和出栈的过程,这个过程遵循“先进后出”的原则。

——栈帧:虚拟机栈由一个个栈帧组成,栈帧是一个内存区块,每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息等

 

   3. 本地方法栈:与虚拟机栈相似,虚拟机栈为JVM提供执行JAVA方法的服务,本地方法栈则为JVM提供使用native 方法的服务,在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

 

4. 堆:JVM的内存数据区,所有线程共享,在虚拟机启动时创建,是垃圾收回收的主要区域。

——由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间(S0)、To Survivor空间(S1),默认情况下年轻代按照8:1:1的比例来分配;

——元空间:f在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)

——直接内存:不是虚拟机运行时数据区的一部分,可以使用Native函数库直接分配堆外内存,然后通过一个存储在 Java 堆中的 DirectByteBuffer 对象作为这块内存的引用进行操作。避免了在 Java 堆和 Native 堆之间来回复制数据。

 

5. 方法区:也是所有线程共享。主要用于存储类的信息、常量池、静态变量、方法数据、方法代码等

——运行时常量池:JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

 

二、JVM运行原理

1. 运行过程

第1步:向操作系统申请空闲内存。系统查找内存分配表,然后把内存段的起始地址和终止地址给JVM,JVM准备加载类文件。

第2步:给堆、栈分配内存。

第3步:文件检查和分析class文件。

第4步:加载类。(类加载机制

第5步:执行方法。

第6步:释放内存。

2. 对象的内存布局

1)对象头:包括两部分信息,一部分用于存储对象自身的自身运行时数据(哈希码、GC分代年龄、锁状态标志等等),另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是那个类的实例。

2)实例数据:是对象真正存储的有效信息,也是在程序中所定义的各种类型的字段内容。

3)对齐填充:不是必然存在的,也无特别含义,仅仅起占位作用。当实例数据部分没有对齐时,就通过它来补全。

——对象的大小必须是8字节的整数倍,而对象头部分正好是8字节的倍数

3. 对象的访问方式

1)句柄:Java堆将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息

2)直接指针:Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而reference 中存储的直接就是对象的地址。

——使用句柄来访问的最大好处是 reference 中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。

4. 对象的回收

1)可达性分析算法:把内存中的每一个对象都看作一个节点,并且定义了一些对象作为根节点“GC Roots”,从这些结点开始向下搜索,搜索所经过的路径成为“引用链”,当一个对象到GC Roots没有任何引用链时,则证明此对象是不可用的。

——可达性分析算法中某个对象不可达,它也并非”非死不可”。如果这个对象覆盖了finalize()方法且这个方法没有被JVM调用过,则JVM会执行finalize()方法。这时你可以在这个方法中重新使某个引用指向该对象。当然,finalize()方法只能救它一次。

2)四种可作为GC Roots的对象:虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI[即一般说的Native]引用的对象

3)四种对象引用:强引用、软引用、弱引用、虚引用

 

三、垃圾回收机制

java GC算法 垃圾收集器

1. 垃圾收集算法

1)标记-清除

2)标记-复制

3)标记-压缩

4)分代收集算法:新生代——复制,老年代——压缩

2. 垃圾收集器 详解 JVM Garbage First(G1) 垃圾收集器

1)Serial收集器

2)ParNew收集器

3)Parallel收集器

4)Parallel Old 收集器

5)CMS收集器

6)G1(Garbage First)收集器

——收集器的组合

3. 收集内容

1)方法区的垃圾收集主要回收两部分内容:废弃常量、无用的类

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值