回顾:《深入理解Java虚拟机》前半部分

该篇回顾的前半部分为“走近java”和“自动内存管理机制”部分,具体章节包括1~5章节。

1. 原理

Java虚拟机的运行时区域(详细链接

运行时区域主要分为两块:线程独占区、线程共享区。

线程独占区包括:虚拟机栈、程序计数器、本地方法栈。

虚拟机栈中有栈针和局部变量表;

程序计数器是Java虚拟机规范中唯一没有被定义OutOfMemoryError的区域;

本地方法栈是对于本地方法的栈的结构。

线程共享区包括:堆、方法区。

堆的其唯一目的是存放对象的实例;

方法区是存储运行时常量池、已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;

对象的回收(垃圾回收器

垃圾回收器有:Serial、ParNew、Parallel Scavenge、Concurrent Mark Sweep (CMS)、G1。

Serial是一个单线程的,结构简单,但是执行效率还算比较高的;

ParNew是多线程的,可以与cms进行结合;

Parallel是用在服务端一个默认的垃圾收集器,主要针对于吞吐量;

Cms是一个并行的垃圾收集器;

G1是目前最高端的垃圾收集器。

垃圾对象的标记算法有两个:引用计数法、可达性分析法。(标记算法与垃圾收集算法

垃圾收集算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法。

标记-清除算法由于标记和清除的速度比较慢,一般不会倾向使用它;

复制算法比较适用于新生代内存;

标记-整理算法比较适用于老年代内存;

分代收集算法实施结合了以上,根据不同的年龄代去选择了不同的收集算法。

对象内存分配原则(内存分配对象

1. 对象首先在Eden区域分配;

2. 大对象直接进入到老年代;

3. 长期存活的对象进入到老年代;

4. 空间的分配担保;

5. 逃逸分析与栈上分配。

2. 工具

命令行工具(命令行工具):jps、jstat、jinfo、jmap、jstack。

图形化工具(JConsoleMAT):JConsole、MAT。

发布了54 篇原创文章 · 获赞 4 · 访问量 9192

猜你喜欢

转载自blog.csdn.net/yichen97/article/details/102491795
今日推荐