程序计数器 Program Counter Register:
记录的是正在执行的虚拟机字节码指令的地址, 此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError的区 域
虚拟机:VM Stack
描述的是 JAVA 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧, 用于存储局部变量表,操作数栈,动态链接,方法接口等信息 局部变量表存储了编译期可知的各种基本数据类型、对象引用 线程请求的栈深度不够会报 StackOverflowError 异常 栈动态扩展的容量不够会报 OutOfMemoryError 异常 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈
本地方法:Native Stack
本地方法栈类似于虚拟机栈,只不过本地方法栈使用的是本地方法
堆:Heap
几乎所有的对象实例都在堆上分配内存
所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域,也被称为“GC堆”;也是我们优化最多考虑的地方。
堆可以细分为:
新生代 Eden 空间 From Survivor 空间 To Survivor 空间 老年代 永久代/元空间
Java8 以前永久代,受 jvm 管理,java8 以后元空间,直接使用物理内存。因此, 默认情况下,元空间的大小仅受本地内存限制。
Jdk 的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。远程应用需要配置
监控内存泄露,跟踪垃圾回收,执行时内存、cpu 分析,线程分析...
运行:正在运行的 休眠:sleep 等待:wait 驻留:线程池里面的空闲线程 监视:阻塞的线程,正在等待锁
Cmd 启动 jvisualvm
工具->插件
如果 503 错误解决:
打开网址 https://visualvm.github.io/pluginscenters.html
cmd 查看自己的 jdk 版本,找到对应的
复制下面查询出来的链接。并重新设置上即可