JVM布局及类加载机制


JVM:
1.JVM组成(5个部分)
2.类加载机制(JVM加载)双亲委派模型,破坏双亲委派模型的3个场景
3.垃圾回收
    a)判断什么是垃圾回收?
    b)垃圾回收的算法
    c)垃圾处理器(7种->CMS /G1)
4.JMM(让JVM高速运行的一种技术)

JVM(Java Virtual Machine的简称。意为Java虚拟机。)
JVM兼容处理:Java能够一次编写,到处运行的关键

JVM布局(HotSpot)

在这里插入图片描述

1.堆(线程共享)

Java堆(Java Heap)是JVM所管理的最大内存区域。Java堆是所有线程共享的一块区域,在JVM启动时创建。
所有的对象都存在于此区域,JVM规范中说到:“所有的对象实例以及数组都要在堆上分配”。
Java堆是垃圾回收器管理的主要区域,因此很多时候可以称之为"GC堆"。
我们设置的 -Xms10m 最小启动内存是针对堆的,
-Xmx10m 最大运行内存也是针对堆的。

2.Java虚拟机栈:(线程私有)

     a)局部变量:8大基础数据类型,对象的引用
     b)操作栈:每个方法都会对应一个操作栈
     c)动态连接:运行常量池的方法引用
    d)方法返回地址:PC寄存器的地址

3.本地方法栈(线程私有)

它与JVM比较相似,只不过JVM栈是给Java和JVM使用,而本地方法栈它为本地方法(c/c++)服务

4.程序计数器(线程私有)

用来记录线程执行的行号
程序计数器内存区域是唯一一个在JVM规范中没有规定任何OOM情况的区域!

什么是线程私有?

由于JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,因此在任何一个确定的时刻,一个处理器(多核处理器则指的是一个内核)都只会执行一条线程中的指令。因此为了切换线程后能恢复到正确的执行位置,每条线程都需要独立的程序计数器,各条线程之间计数器互不影响,独立存储。我们就把类似这类区域称之为"线程私有"的内存。

5.元空间(JDK1.8)(线程共享)

JDK1.7叫方法区(永久代)
运行时常量信息,字符串常量池,类的元信息…JDK1.7的时候的方法区
JDK1.8元空间变成本地内存,并且将字符串常量池移到到堆中

线程私有区域:程序计数器、Java虚拟机栈、本地方法栈
线程共享区域:Java堆、元空间(方法区JDK1.7)

堆划分:

新生代:第一次创建的对象都会分配到此区域
老年代:经历了一定的垃圾回收依然存活下来的对象会移动到老年代,大对象在创建的时候也会直接进入老年代。HotSort默认的执行次数是15,经历15GC就会从新生代转为老年代。

新生代区域划分:

1.Eden:80%内存
2.S0:10%内存
3.S1:10%内存
新生代内存利用率可达到90%

为什么大对象会直接进入老年代?

答:核心原因是因为大对象的初始化比较耗时,如果频繁的创建和销毁会带来一定的性能开销,因此最好的实现方法是将他存入GC频率更低的老年代。

-Xmx10m------->堆最大容量的设置
-Xms10m------->堆最小容量的设置
通常情况下可以将Xmx和Xms的大小设置相同,这样可以防止堆扩容所造成的抖动。

JVM调优的时候可以设置的参数类型:

-X:非标准的参数设置,他只能针对特殊HotSpot生效

-XX:标准参数设置,他针对所有的HotSpot生效

-D:设置应用程序的设置 -D{Mykey}={value}

JVM内存布局小结:

线程私有区域:程序计数器、Java虚拟机栈,(先进后出)本地方法栈
线程共享区域:Java堆、元空间(方法区JDK1.7)

JVM类加载机制(Class Loading)

在这里插入图片描述

类加载机制的流程

加载
效验
准备
解析
初始化
使用
卸载

加载

在加载阶段,Java虚拟机需要完成以下三件事情
1.)通过⼀个类的全限定名来获取定义此类的⼆进制字节流
2.将静态的存储结构转换成方法区的运行时数据结构。(将静态文件转成运行内存)
3.在内存中⽣成⼀个代表这个类的java.lang.Class对象,作为⽅法区这个类的各种数据的访问⼊⼝。

效验

验证选项:
1.文件格式效验
2.字节码效验
3.符号引用验证

准备

将类中的静态变量在内存中进行分配

解析

机将常量池内的符号引⽤替换为直接引⽤的过程,也就是初始化常量的过程。
符号引用:类,方法的完全限定名(全路径名称)
直接引用:将符号引用加载到内存中(根据引用指向内存中的对象)

初始化

此步骤开始将执行权从JVM转移到自己写的程序,开始执行构造函数

使用

卸载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值