Day 12 狂神说Java基础笔记(JVM01-14)
01-学习大纲02-体系结构作业:JVM画图03-类加载器及双亲委派机制类加载器画图:虚拟机自带加载器-启动类/根加载器/扩展类加载器/应用程序加载器百度双亲委派机制APP-Exr-rt -EXR-APPJava=c+±-,去掉了指针和内存管理,native本地c++方法04-沙箱安全机制05-Native、方法区计数器06-栈栈:数据结构;先进后出队列:先进先出(FIFO)main()先执行后结
01-学习大纲
02-体系结构
作业:JVM画图
https://www.cnblogs.com/liululee/archive/2019/09/04/11461998.html
03-类加载器及双亲委派机制
类加载器画图:虚拟机自带加载器-启动类/根加载器/扩展类加载器/应用程序加载器
百度双亲委派机制
APP-Exr-rt -EXR-APP
Java=c+±-,去掉了指针和内存管理,native本地c++方法
04-沙箱安全机制
05-Native、方法区
计数器
06-栈
栈:数据结构;先进后出
队列:先进先出(FIFO)
main()先执行后结束——在栈中执行
栈:又称栈内存,主管程序的运行;生命周期和线程同步;线程结束,栈内存释放,不存在垃圾回收。
栈中存放:8大基本类型+对象引用+实例方法
栈的运行原理:栈满了StackOverflowError
07-HotSpot和堆
三种JVM
- Sun公司:HotSpot
- BEA:JRockit
- IBM:J9 VM
堆 heap,一个JVM只有一个堆,堆内存的大小是可以调节的
类加载器读取了类文件后,一般会把类,方法,常量,变量,保存所有引用类型的真实对象放到堆中。
垃圾回收:轻量级GC,重量级GC(Full GC)
堆内存分为三个区域:新生区(伊甸园区Eden Space;幸存0区,幸存1区)、养老区、永久存储区。
GC垃圾回收,主要在伊甸园区和养老区
假设内存满了OOM,java.lang.OutOfMemoryError
在JDK8以后,永久存储区叫元空间
08-新生区、永久存储区、堆内存调优
- 新生区、类诞生和成长的地方,甚至死亡;经过研究,99%的对象都是临时对象
- 伊甸园区Eden Space:所有对象都在伊甸园区new出来
- 幸存0区
- 幸存1区
- 养老区Old:杀不死的
- 永久存储区Perm:这个区域是常驻内存的,用于存放JDK自身携带的class对象,Interface元数据,存储的是Java运行时的一些环境。这个区域不存在垃圾回收,关闭虚拟机就会释放这个区域的内存。
- 一个启动类加载了大量的第三方jar包;tomcat部署了大量的应用;大量动态生成的反射类;不断地被加载,直到内存满,会导致这个区域崩溃,出现OOM
-jdk1.6之前:永久代,常量池在方法区之中
-jdk1.7:永久代,但是慢慢的退化了,去永久代,常量池在堆中
-jdk1.8:无永久代,常量池在元空间(方法区/非堆)
默认的情况下:分配的总内存 是电脑内存的1/4;而初始化的内存:1/64
? -Xms1024m -Xmx1024m -XX:+PrintGCDetails
参数调优
09-JPofiler工具分析OOM原因
内存快照分析工具:MAT(Eclipse:https://www.jianshu.com/p/d8e247b1e7b2),JPofiler
-分析Dump内存文件,快速定位内存泄漏
-获得堆中的数据
-获得大的对象
-。。。
待看*
10-GC介绍之引用计数法
JVM在进行GC时,并不是对这三个区域统一回收,大部分时候,回收都是新生代。
轻GC:普通的GC
重GC:全局的GC
标记清除法,标记压缩,复制算法,
引用计数器:每个对象都记录使用次数,清除使用次数为零的算法。微软,python,
11-GC之复制算法
谁空谁是to
1。每次GC都会将Eden活得对象移到幸存区中,一旦Eden区被GC后,就会是空的。
2.如果空的相等,就把from移动到to,
当一个对象经历了15(-XX:MaxTenuringThreshold)次GC,都还没有死,进入老年代
年轻代主要使用复制算法。
好处:没有碎片
坏处:浪费内存空间,多了一半空间是空的,极端下,对象百分百存活,操作移动复杂
12-标记压缩清楚算法
1.扫描对象,对活着的对象标记
2. 清除:对没有标记的对象进行清除
优点:不需要额外空间
缺点:两次扫描浪费时间,会产生内存碎片。
3.再优化:压缩
防止内存碎片产生,再次扫描,向一端移动存活的对象
标记清除压缩:先标记清除几次再压缩
13-总结
内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
内存整齐度:复制算法=标记清除算法>标记压缩算法
内存利用率:标记压缩算法=标记清除算法>复制算法
GC:分代收集算法
年轻代:存活率低-复制算法
老年代:区域大,存活率高-标记清除(内存碎片不是太多)+标记压缩
《深入理解JVM》
14-JMM
什么是JMM:百度
https://www.cnblogs.com/zhengbin/p/5654805.html
它干嘛的:官方,其他人博客,视频
它该如何去学习
更多推荐
所有评论(0)