1. JVM 分区
方法区 堆
方法栈 本地方法栈 程序计数器
直接内存
类加载子系统 执行引擎
2. java 程序执行过程
源文件 编译器 字节码 JVM解释器 机器码
3. JVM的线程
一个程序对应一个虚拟机
一个jva线程 对应一个操作系统原生线程
4. 内存区域
程序计数器: 指示当前执行的字节码行号 。native方法则为空。
方法栈 :描述java方法执行的内存模型。每个方法执行都有一个栈帧。栈帧:局部变量表、操作栈、动态链接、放回地址。
本地方法栈
为native原生方法作支撑。
堆
对象和数组存储的地方。GC主要的工作对象。

- eden区 对象创建区域
- from区 上一次GC的幸存者。
- to区 与分区GC作配合。保留minorGC过程的幸存者。
- minorGC过程
复制 、edge+1 、清空 、 调换 。
当edge == 15 时 ,转老年代。(较大对象直接转老年代) - 老年代
MajorGC 标记清除算法。不会频繁执行。
方法区
java 7 永久代: 用于存储被 JVM 加载的类信息、常量、静 态变量、即时编译器编译后的代码等数据.
java 8 元空间: 不在虚拟机中,使用本地内存。常量池和类的静态变量放入java堆。
GC主要作类型卸载。
5. JVM GC算法
-
确定可回收算法
- 引用计数法 :存在循环引用的问题。
- 可达性分析 : DFS GC root
两次不可达变成可回收
-
清除算法
- 标记清除算法 : 内存碎片
- 复制算法 : 使用内存压缩一半;存活对象多可能降低效率。
- 标记整理算法:将存货对象移到另一端,覆盖回收对象。并清除边界外对象
- 分代收集算法
略
6. java中的四种引用类型
- 强引用 GC不回收
- 弱引用 GC在内存不足时回收
- 软引用 GC不管其内存是否足。都回收。
- 虚引用。主要跟踪对象被垃圾回收的状态。
网友评论