程序计数器
定义
作用
虚拟机栈
- 每个线程运行时所需要的内存,称为虚拟机栈
- 每个栈由多个栈帧(Frame) 组成,对应着每次方法调用时所占用的内存
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
注意
- 垃圾回收是否涉及栈内存?
- 栈内存分配越大越好吗?
- 方法内的局部变量是否线程安全?
- 如果发送了变量逃逸,则线程不安全
- 如果方法内局部变量没有逃离方法的作用访问,它是线程安全的
- 如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全
调整栈大小
-Xss
默认栈大小1m
溢出
- 栈帧过多导致栈内存溢出
- 栈帧过大导致栈内存溢出
线程诊断
CPU飙高:
- 找出占用CPU大的进程:top
- 找出占用CPU大的线程:ps -H -eo pid,tid,%cpu
- 找出具体代码:jstack,然后把线程id换算成16进制
死锁:
- 直接使用jstack,查看描述
本地方法栈
JNI技术
堆
内存溢出
内存诊断
- jps
- 查看当前系统中有哪些java进程
- jmap
- 查看堆内存占用情况
- jconsole
- 图形界面的,多功能的监测工具,可以连续监测
- jvisualvm
- 抓取dump文件,然后进行内存分析