当前位置 : 主页 > 编程语言 > java >

Java性能监控

来源:互联网 收集:自由互联 发布时间:2022-07-17
目录 ​​Jvm内存模型​​ ​​程序计数器ProgramCounterRegister:​​ ​​虚拟机:VMStack​​ ​​本地方法:NativeStack​​ ​​堆:Heap​​ ​​堆​​ ​​垃圾回收​​ ​​jconsole与


目录

  • ​​Jvm内存模型​​
  • ​​程序计数器ProgramCounterRegister:​​
  • ​​虚拟机:VMStack​​
  • ​​本地方法:NativeStack​​
  • ​​堆:Heap​​
  • ​​堆​​
  • ​​垃圾回收​​
  • ​​jconsole与jvisualvm​​
  • ​​jvisualvm能干什么​​
  • ​​安装插件方便查看gc​​
  • ​​优化​​
  • ​​JVM分析&调优​​

Jvm内存模型

Java性能监控_java

程序计数器ProgramCounterRegister:

记录的是正在执行的虚拟机字节码指令的地址,
此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError的区

虚拟机:VMStack

描述的是JAVA方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,
用于存储局部变量表,操作数栈,动态链接,方法接口等信息
局部变量表存储了编译期可知的各种基本数据类型、对象引用
线程请求的栈深度不够会报StackOverflowError异常
栈动态扩展的容量不够会报OutOfMemoryError异常
虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈

本地方法:NativeStack

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

堆:Heap

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

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

  • 新生代
  • Eden空间
  • FromSurvivor空间
  • ToSurvivor空间
  • 老年代
  • 永久代/元空间
  • Java8以前永久代,受jvm管理,java8以后元空间,直接使用物理内存。因此,
    默认情况下,元空间的大小仅受本地内存限制。

垃圾回收

Java性能监控_jvm_02

从Java8开始,HotSpot已经完全将永久代(PermanentGeneration)移除,取而代之的是一
个新的区域—元空间(MetaSpace)

Java性能监控_jvm_03

jconsole与jvisualvm

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

jvisualvm能干什么

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

运行:正在运行的
休眠:sleep
等待:wait
驻留:线程池里面的空闲线程
监视:阻塞的线程,正在等待锁

Java性能监控_jvm_04

安装插件方便查看gc

  • Cmd启动jvisualvm
  • 工具->插件

优化

中间件越多,性能损失越大,大多都损失在网络交互了;
业务:

  • Db(MySQL优化)
  • 模板的渲染速度(缓存)
  • 静态资源(动静分离)

JVM分析&调优

jvm调优,调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了,
保证服务的稳定,gc永远会是Java程序员需要考虑的不稳定因素之一。复杂和高并发下的
服务,必须保证每次gc不会出现性能下降,各种性能指标不会出现波动,gc回收规律而且
干净,找到合适的jvm设置。Fullgc最会影响性能,根据代码问题,避免fullgc频率。

可以适当调大年轻代容量,让大对象可以在年轻代触发yonggc,调整大对象在年轻代的回收频
次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间;


上一篇:Java中哪些操作会使线程释放锁资源
下一篇:没有了
网友评论