JVM体系结构概览
类加载器
类的加载器
启动类加载器(Bootstrap) c++写的 java获取加载器是获取的是null
- 扩展类加载器(Extension)
- 应用程序类加载器(AppClassLoder)
- java.lang.ClassLoder的子类 用户可以自己定义的一个类 (主要是上面三个加载器)
类加载时是双亲委派及机制 简单明了就是向上捅
沙箱安全
运行时数据区
包括:
-
方法区
储存一个类的结构信息 -
堆
-
java栈 java stack
-
本地方法栈 native method stack
native java无能为力 需要调用底层或者第三方函数库 在这里执行 -
程序计数器 pc寄存器
指向下一条要执行的指令
方法区
- 所有线程共享的内存区域
- 方法区储存的是类的结构信息
- 方法区是一种规范
对象类存储在堆中 不在方法区
java 栈
方法在java里叫方法 在栈中叫栈帧
- 栈管运行 堆管存储
- 栈保存的东西?
a. 8种基本类型
b. 对象的引用变量
c. 实例方法
d. 实例对象的引用地址
堆 heap
堆内逻辑上分为三个部分:新生 养老 永久(元空间)
物理上分为两个部分:新生 养老
元空间:存储区的一个常驻内存区域。存放JDK自身携带所携带的Class Interface的元数据
堆参数调整:
• 参数一样大
GC日志信息
这是YGC↓
垃圾回收算法: 分代收集算法集合
- 引用计数法
a. 缺点
ⅰ. 每次对对象赋值时要维护计数器,计数器本身也是一种消耗
ⅱ. 难以处理循环引用
b. 优点
ⅰ. 简单
JVM一般不使用 - 复制算法
a. 优点
ⅰ. 不会产生内存碎片
b. 缺点
ⅰ. 消耗内存 - 标记清除
a. 介绍:先进行标记,后期进行统一的回收
b. 优点
ⅰ. 节约内存空间
c. 缺点
ⅰ. 增加内存碎片
主要用于老年代
- 标记压缩
a. 优点
ⅰ. 相对于标记清除碎片整理了
b. 缺点
ⅰ. 相对于标记清除时间增加
c. 标记-清除-压缩 (进化那般)
ⅰ. 原理 - 集中清除跟压缩
- 多次GC后才进行压缩
GC总结
JMM内存模型
JVM语法规定静态块>构造块>构造方法