性能监控和工具使用

文章详细介绍了JVM内存的各个组成部分,包括程序计数器、虚拟机栈、本地方法栈、堆和元空间,强调了堆在对象实例分配中的作用以及新生代和老年代的概念。同时提到了JDK提供的监控工具Jconsole和JVisualVM,它们用于监控内存、CPU使用、垃圾回收和线程状态,对于诊断性能问题和内存泄漏非常有用。
摘要由CSDN通过智能技术生成

1、jvm 内存模型

程序计数器 Program Counter Register:

 记录的是正在执行的虚拟机字节码指令的地址,

 此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError的区 域

 虚拟机:VM Stack

 描述的是 JAVA 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧, 用于存储局部变量表,操作数栈,动态链接,方法接口等信息

 局部变量表存储了编译期可知的各种基本数据类型、对象引用

 线程请求的栈深度不够会报 StackOverflowError 异常

 栈动态扩展的容量不够会报 OutOfMemoryError 异常

 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈

 本地方法:Native Stack

 本地方法栈类似于虚拟机栈,只不过本地方法栈使用的是本地方法

 堆:Heap

 几乎所有的对象实例都在堆上分配内存

2、堆 

所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域,也被称为“GC堆”;也是我们优化最多考虑的地方。

堆可以细分为:

 新生代

 Eden 空间

 From Survivor 空间

 To Survivor 空间

 老年代

 永久代/元空间

 Java8 以前永久代,受 jvm 管理,java8 以后元空间,直接使用物理内存。因此, 默认情况下,元空间的大小仅受本地内存限制。

 

3、jconsole 与 jvisualvm

Jdk 的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。远程应用需要配置

1、jvisualvm 能干什么

监控内存泄露,跟踪垃圾回收,执行时内存、cpu 分析,线程分析...

运行:正在运行的

休眠:sleep

等待:wait

驻留:线程池里面的空闲线程

监视:阻塞的线程,正在等待锁

2、安装插件方便查看 gc 

 Cmd 启动 jvisualvm

 工具->插件

如果 503 错误解决:

 打开网址 https://visualvm.github.io/pluginscenters.html

 cmd 查看自己的 jdk 版本,找到对应的

复制下面查询出来的链接。并重新设置上即可 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个风轻云淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值