JVM
2022-04-30 17:46:11 0 举报
JVM内存模型,内存分配策略,垃圾回收算法,垃圾回收器
作者其他创作
大纲/内容
堆
标记整理算法:在标记清除的基础上,清除内存对象后将所有可用的对象移动到一端。缺点:效率低,移动耗时。优点:保证内存使用空间。
垃圾收集器(有7种)
对象引用分类1.强引用:程序中普通存在的对象引用。2.软引用:SoftReference实现,内存溢出前回收。3.弱引用:WorkReference实现,下一次垃圾回收是被回收。4.虚引用:PhantomReference实现,没有实际作用。
运行时常量池
分代回收算法:根据新生代,老年代使用不同的垃圾回收算法,新生代的幸存区使用标记复制算法。老年代使用标记清除或者标记整理算法
计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。此内存区域是唯一一个在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域。
判断对象是否存活?1.引用计数法,对象被引用,对象的标识加一,断开引用减一,当引用标识为0是,即认为对象死亡。相互引用可能出现问题。2.可达性分析。从GCroot根开始,可直接或间接找到对象,说明对象存活,反之对象凋亡。
幸存2区to
每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧[1](Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
1.线程共享的内存区域。2.用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。3.jdk8之前方法区被称为永久代(非堆),之后被称为元空间。4.这区域的内存回收目标主要是针对常量池的回收和对类型的卸载
直接内存
4中垃圾回收算法1.标记清除算法2.标记整理算法3.标记复制算法4.分代回收算法
Serial收集器:单线程的收集器,新生代采用复制算法,老年代采用标记整理算法
准备:prepare
系统类加载器Application class loader
miniGC(Young GC):指发生在新生代的来及回收动作。Major GC/Full GC: 一般会回收老年代,新生代,方法区的垃圾。
标记复制算法:将内存分为两个部分,标记处存活对象移动到空余空间,然后集体删除之前的空间。优点:会得到连续大空间。缺点:由一半的内存开销。
内存分配策略:1.大多数情况下对象会分配到伊甸区,当伊甸区没有足够空间是,虚拟机会发起一次miniGC。2.大对象直接进入老年代,避免大对象再幸存区复制带来的效率问题。3。长期存活的对象进入老年代,虚拟机会给每个进入幸存区对象一个年龄标识,默认最大是15,当对象在幸存区复制使用15次,会被放入到老年代,这个可以设置 -XX:PretenureSizeThreshold
.java
年轻代
引导类加载器BootStrap class loader
解析:Reslove
线程共享区
加载过程Loading
老年代
ParNew收集器:Serial收集器的多线程版本。除了是多线程,其余策略和Serial收集器一样。
1.直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。2.JDK1.4加入NIO类,使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
eDen新生代
链接阶段Linking
2.执行引擎
C语言,汇编语言和一部分Java语言
幸存1区 form
G1收集器:将内存分为若干个region,region大小=堆/2048,保留了新生代,老年代的概念,但不再有物理隔阂,当一个对象大于region的50%将被判定为大对象,大对象会放在Humongous区。引用计数法和可达性分析,来标记回收对象,多线程。
幸存区
它可以看作是当前线程所执行的字节码的行号指示器
8大基础类型+对象引用+实例的方法(方法入栈与出栈的过程)
1.运行时常量池是方法区的一部分。用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中
标记清除算法:标记需要使用的对象,清除不被使用的对象。优点:效率高,简单。缺点:内存碎片,不连续空间。
新生代
PC寄存器(程序计数器)
线程私有区
1.类加载器子系统(Class Loader SubSystem)
方法区(元空间(永久存储区))
本地方法接口
扩展类加载器Extension class loader
虚拟机栈
本地方法栈
.class
本地方法库
初始化Initialization
3.JVM虚拟机:
javac编译
CMS收集器:多线程,以获取最短垃圾回收停顿时间。Hotspaot上第一款并发收集器。标记清除算法。使用可达性分析。
验证:verify
0 条评论
下一页