一、JVM知识点
1、jvm的位置
2、JVM的体系结构
栈肯定不会存在垃圾;jvm的调优主要是在对堆和方法区;
3、 类加载器
作用:加载Class文件
1.虚拟机自带的加载器
2.启动类(根)加载器
3.扩展类加载器
4.应用程序加载器
双亲委派机制
4、沙箱安全机制
5、native
6、pc寄存器
7、方法区
8、栈
栈:栈内存,主管程序的运行,生命周期和线程同步;线程结束,栈内存也就释放,对于栈来说,不存在垃圾回收问题;一旦线程结束,栈就是over!
栈: 8大基本类型+对象引用+ 实例方法
栈运行的原理:栈帧
栈满了:StackOverflowError
栈+堆+方法区:交互关系:
9、三种JVM
- Sun公司:Java HotSpot™ 64-Bit Server VM (build 25.0-b70, mixed mode)
- BEA:JRockit
- IBM:J9VM
10、堆
Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。
类加载器读取了类文件后,一般会把什么东西放入堆中?类,方法,常量,变量,保存外卖所有的引用类型的真实对象。
堆中分为:
- 新生区
- 养老区
- 永久区
GC垃圾回收,主要是在新生区和养老区。
假设内存满了,OOM,堆内存不够了:
在jdk8以后永久存储区改了一个名字元空间。
新生区
- 类:诞生和成长的地方,甚至死亡。
- 伊甸园,所有的对象都是在伊甸园区new出来的!
- 幸存者区(0,1)
老年区
永久区
元空间:逻辑上存在;物理上不存在;
默认情况下:分配的总内存是电脑内存的1/4,而初始化的内存:1/64
OOM情况的解决方法:
- 尝试扩大堆内存大小
- 分析内存,看一下哪个地方出现了问题(专用工具)
工具调优(JProfiler):
使用:idea安装插件,下载JProfiler,idea添加JProfiler,写配置信息,遇到问题看dump文件
10、GC
复制算法:
标记清除算法:
优点:不需要额外的空间!
缺点:两次扫描,严重浪费时间,会产生内存碎片
标记压缩(优化标记清除算法):
标记清除压缩:多标记几次以后再压缩。
JMM:java memory model