引言
1.什么是JVM?
定义:Java Virtual Machine -java 程序的运行环境(java 二进制字节码的运行环境)
好处:
-
一次编写 到处运行
-
自动内存管理,垃圾回收功能
-
数组下标越界检查
-
多态
比较:
2.学习JVM有什么用
-
面试
-
理解底层实现的原理
-
中高级程序员必备的技能
3.常见的JVM
4.学习路线
内存结构
1.程序计数器
-
定义:Program Counter Register程序计数器(寄存器)
-
作用
是记住下一条JVM指令的执行地址
-
特点
-
对于线程来说是私有的
-
唯一不会存在内存溢出的区域
-
2.虚拟机栈
-
定义
栈:线程运行时需要的内存空间 栈帧:每个方法运行时需要的内存,栈由多个栈帧组成
-
演示
public class test { public static void main(String[] args) { m1(); } public static void m1(){ m2(1,2); } public static int m2(int a,int b){ int c = a + b; return c; } }
-
栈内存溢出
-
线程运行诊断
1.虚拟机栈有关的问题
1、垃圾回收是否涉及栈内存? 不需要!栈帧出栈的时候就已经释放掉了
2、栈内存分配越大越好吗? 不是!栈内存太大反而影响到线程数目,采用系统默认的大小即可
3、方法内的局部变量是否线程安全? 如果方法内部局部变量没有逃离方法的作用范围,它是线程安全的 如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全
2.栈内存溢出
-
栈帧过多(递归调用)
-
栈帧过大
3.线程运行诊断
1.CPU占用过多
3.本地方法栈
定义
Java虚拟机调用本地方法(Native Method)时提供的内存空间