
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言的学习人数和使用范围在众多编程开发语言中也算是非常庞大了,而本文我们就通过案例分析来简单了解一下,Java虚拟机入门需要掌握哪些知识。
1.JVM的内存区域
JVM将内存分为五块区域分别是程序计数器、虚拟机栈、本地方法栈、堆和方法区
1.1程序计数器
定义:
一个不会发生内存溢出异常的内存区域.
保存的是当前JVM解释器执行命令的行号
小的一块区域
1.2.虚拟机栈
定义:保存的是局部变量表等信息
局部变量表
局部变量表
reference
基本类型变量
returnAddress
1.3.本地方法栈
和虚拟机栈差不多,保存的是本地方法的信息,在hotspot虚拟机中将虚拟机栈和本地方法栈合二为一
1.4.堆
定义:
大的一块内存区域.
存放的是对象的实例数据
JVM启动时创建
分为新生代、老年代
新生代
老年代
元空间
和永久代差不多,将class文件的元数据保存到元空间,元空间使用的是本地内存
1.5.方法区
运行时常量池
定义:存放的是class文件的常量池的数据
常量
静态变量
JIT及时编译后的代码
类信息
2.垃圾收集算法&垃圾收集器
介绍常用的垃圾收集算法和垃圾收集器
2.1判断对象存活的算法
引用计数
定义:只作为了解,没有虚拟机使用这种方式.
有对象引用就+1,对象不引用就-1,计数器为0就回收对象.
缺点:无法解决对象循环引用问题
可达性分析
定义:只要GCRoots连接对象的实例,对象就不能被回收
虚拟机栈引用的对象
方法区静态属性引用的对象
方法区常量引用的对象
本地方法区引用的对象
2.2垃圾收集算法
标记清除
定义:用在老年代,收集的空间是不连续的,大对象无法分配时,可能会提前触发一次fullGC.
复制
定义:用在新生代,有一个Eden区和两个survivor区,按8:1的比例,每次minorgc的时候会把Eden和一个survivor区的存活对象分配到另一个survivor区中,如果survivor区的空间不够,就直接分配到老年代
标记整理
定义:和标记清除相比,就是整理的空间是连续的
分代收集
定义:新生代用复制算法,老年代用标记清除或标记整理算法
2.3垃圾收集器
新生代
serial
单线程
进行垃圾收集,必须暂停其他所有工作线程,"StopTheWorld"
简单高效,Client模式下选
parNew
1.除了使用多条线程进行垃圾收集之外,其他与Serial相同
2.可以与CMS配合
parallelscavenger
吞吐量收集器
大停顿时间参数(调低停顿时间,会增加停顿频率)
停顿比率参数(0-100)
GC自适应的调节策略
老年代
serialold
在CMS并发收集发生ConcurrentModeFailure时,作为备胎使用
cms
停顿段,并发收集
对CPU资源敏感
CPU不足4个时,影响程序的性能
无法清除浮动垃圾
浮动垃圾:和用户线程并行执行产生的新垃圾.
这一部分垃圾无法回收,因为cms和用户线程行执行,所以需要留一部分内存给cms使用,老年代空间使用92%以上时启动cms,如果空间不够会报"ConcurrentmodeFailure",这时候会启动备用方案serialold进行垃圾回收.
标记清除算法
收集的空间是不完整的
parallelscavengerold
parallelscavenger的老年代版本
G1
特点:
充分利用计算机资源
分代收集
空间整合
建立可预测的停顿
通过rememberset解决全局扫描region对象互相引用问题.在reference对象进行写操作的时候,发生一个写中断,如果有跨region引用就通过cardTable把信息记录到region的rememberset中,在垃圾回收的时候通过枚举根节点和rememberset就可以不会遗漏要回收的垃圾对象了.
回收的四个步骤:
初始标记
并发标记
终标记
筛选回收
找到所有GCRoots,修改ntmd的值,在进行并发标记的时候,保证用户线程可以将对象分配在正确可用的region中
用户线程和垃圾收集线程同时执行
同时执行产生变动的那部分,记录到remembersetlogs中,并把这个logs的内容放到rememberset中
在用户规定的时间里,回收大价值的region的垃圾
特点
充分利用计算机资源
分代收集
空间整合
建立可预测的停顿
垃圾收集步骤
初始标记
找到所有GCRoots,修改ntmd的值,在进行并发标记的时候,保证用户线程可以将对象分配在正确可用的region中
并发标记
用户线程和垃圾收集线程同时执行
终标记
同时执行产生变动的那部分,记录到remembersetlogs中,并把这个logs的内容放到rememberset中
筛选回收
在用户规定的时间里,回收大价值的region的垃圾
2.3.1垃圾收集器配合使用图
2.4内存分配与回收策略
对象优先在eden分配
大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判定
同年龄的对象的大小超过整个Survivor区的一半,大于等于这个年龄的对象都会被放入老年代.
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。