架构师训练营 2 期 - 第九周总结
概要
本周学习主要的内容是常见的 JVM 虚拟机,JVM 垃圾回收,Java 代码优化
重点内容
1.JVM 虚拟机
JVM 主要由三部分组成:
1)类加载器(Class Loader Sub-system)
负责动态加载类:在运行时,加载、链接、初始化一个类。
2)运行时数据区(Runtime Data Areas)
a)方法区:为共享区,所有的类级别的数据(包括静态变量)都会存储到这里
b)堆:也是共享区,所有的对象,以及它对应的实例变量和数组都被存储在这个区域
c)栈:每个线程将创建单独的运行时栈区。对于每个方法调用,将在栈存储器中产生一个条目,称为栈帧,所有局部变量都创建于栈内存。栈区不共享资源,所以是线程安全的。
d)程序计数寄存器:每个线程都有单独的 PC 寄存器,用于保存当前执行指令的地址。一旦执行指令,PC 寄存器将被下一条指令更新。
e)方法栈:Native 方法栈保存本地方法信息。Native 方法指的是 Java 通过 JNI 直接调用本地 C/C++ 库,相当于 C/C++ 暴露给 Java 的一个接口。
3)执行引擎(Execution Engine)
上述过程生成的字节码将由执行引擎读取字节码并逐个执行。这里又包括解释器,JIT 编译器和垃圾收集器。
2.JVM 垃圾回收
性能工具
JPS:用来输出 JVM 中运行的进程状态信息
Jstack:用来查看某个 Java 进程内的线程堆栈信息
Jmap & Jhat:用来查看堆内存使用状况
Jstat:JVM 统计监测工具
hprof:展现 CPU 使用率,统计堆内存使用情况
Jconsole:bin 目录下的工具,支持远程连接,可以查看 JVM 的概述,内存,线程等详细情况
3.Java 代码优化
评论