首页 > 编程语言 >Java运行环境监控

Java运行环境监控

时间:2022-11-22 11:12:24浏览次数:82  
标签:表示 Tenuring Survivor 新生代 内存 监控 Threshold Java 运行

Java运行环境监控

打开JDK自带的JavaVisualVM

在窗口命令中输入:jvisualvm,确认回车打开JavaVisualVM工具

image-20220907083913417

找到JDK版本对应的插件地址

访问网址: https://visualvm.github.io/index.html,进入插件中心(Plugins Centers)找到对应的插件地址,并进行复制。

image-20220907084234141

进入插件管理修改url

在”工具-插件“之后,选择“设置-编辑”修改url地址为刚刚复制的对应的JDK版本的地址。

image-20220907084308192

安装Visual GC插件

image-20220907084350556

重启,如打开本地-VisualVM即可看到Visual GC

image-20220907085055805

 

 

 

Visual GC介绍: 区域分为三部分:spaces、graphs、histogram

  1. spaces区域:代表虚拟机内存分布情况。从图中可以看出,虚拟机被分为Perm、 Old、Eden、S0、S1

  2. perm:英文叫做Permanent Generation,我们称之为永久代。(hotspot虚拟机的设计团队选择把GC分代收集扩展至此而已,正确的应该叫做方法区或者非堆)。

  3. 通过VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 设置初始值与最大值

  4. heap:java堆(java heap)。它包括老年代(图中Old区域)和新生代(图中Eden/S0/S1 三个统称新生代,分为Eden区和两个Survivor区域),他们默认是8:1:1分配内存(Eden区占8份,两个Survivor区各占1份)。

  5. 通过VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError -Xmn100m -XX:SurvivorRatio=8

设置初始堆内存、最大堆内存、内存异常打印dump、 新生代内存、新生代内存分配比例(8:1:1),因为Heap分为新生代跟老年代,所以512M- 100M=412M,老年代就是412M

(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者Full GC,导致性能降低)

  1. Graphs区域:内存使用详细介绍

  2. Compile Time(编译时间):8906compiles 表示编译总数,33.874s表示编译累计时间。一个脉冲表示一次JIT编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长。

  3. Class Loader Time(类加载时间): 7527loaded表示加载类数量, 0 unloaded 表示卸载的类数量,6.971s表示类加载花费的时间

  4. GC Time(GC Time):24 collections表示垃圾收集的总次数,352.926s表示垃圾 收集花费的时间,last cause表示最近垃圾收集的原因

  5. Eden Space(Eden 区):括号内的84.000M表示最大容量,41.000M表示当前容量,后面的18.732M表示当前使用情况,22collections表示垃圾收集次数,8.458s表示垃 圾收集花费时间

  6. Survivor 0/Survivor 1(S0和S1区):括号内的3.938M表示最大容量,1.188M表示 当前容量,之后的值是当前使用情况

  7. Old Gen(老年代):括号内的472.625M表示最大容量,145.031M表示当前容量, 之后的87.031表示当前使用情况,79collections表示垃圾收集次数 ,226.861s表示垃圾收 集花费时间

  8. Perm Gen(永久代):括号内的同样表示最大容量和当前容量(图中没有),后面的还是表示当前使用情况

  9. Histogram区域:survivor区域参数跟年龄柱状图3.1)Tenuring Threshold:表示新生代年龄大于当前值则进入老年代

  10. Max Tenuring Threshold:表示新生代最大年龄值。

  11. Tenuring Threshold与Max Tenuring Threshold区别:Max Tenuring Threshold是一个最大限定,所有的新生代年龄都不能超过当前值,而Tenuring Threshold是个动态计算出来的临时值,一般情况与Max Tenuring Threshold相等,如果在Suivivor空间中,相同年龄所有对象大小的总和大于Survivor空间的一半,则年龄大于或者等于该年龄的对象就都可以直接进入老年代(如果计算出来年龄段是5,则Tenuring Threshold=5,age>=5的Suivivor对象都符合要求,直接进入老年代),Tenuring Threshold才是新生代是否进入老年代判断的依据。

  12. Desired Survivor Size:Survivor空间大小验证阙值(默认是survivor空间的一半),用于Tenuring Threshold判断对象是否提前进入老年代。

  13. Current Survivor Size:当前survivor空间大小

  14. histogram柱状图:表示年龄段对象的存储柱状图

  15. 如果显示指定-XX:+UseParallelGC -- 新生代并行、老年代串行收集器 ,则 histogram柱状图不支持当前收集器 原文链接:https://blog.csdn.net/weixin_48268269/article/details/123560396

  16.  

标签:表示,Tenuring,Survivor,新生代,内存,监控,Threshold,Java,运行
From: https://www.cnblogs.com/wx-36/p/16914490.html

相关文章

  • java中 implement和extends的作用和区别详细解释
    一、extends是继承类,implements是实现接口。类只能继承一个,接口可以实现多个。extends继承父类的时候可以重写父类的方法,也可以调用父类的非私有方法;implements实现接口......
  • Java基础
    Java基础环境准备安装JDK配置环境变量安装开发工具(IDEA)IDEAIDE(集成开发环境,是用于提供程序开发环境的应用程序)IDEA,开发Java代码WebStorm,开发前端代码......
  • day05_狂神说java基础_流程控制
    d05Java流程控制(p33-p44)1.用户交互Scanner之前的基本语法中没有涉及到程序和人的交互,java.util.Scanner是Java5提供的工具类,可以通过Scanner类获取用户的输入。......
  • java mybatis查询数据库获取树形结构数据
    数据库数据,每条数据都有code和parent_code,最顶级的parent_code为1实体类importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatispl......
  • Java简单取反操作
    通过取反可以制作简单的文件加密处理器。示例:publicstaticvoidmain(String[]args)throwsException{inti=3;//取反,并且转为字符串......
  • 用 python 和 java 实现线性代数计算(1)—— 矩阵基本操作
    参考:《机器学习算法框架实战:Java和Python实现》python实现主要是调用NumPy库做的;java实现基本没有调库文章目录​​1.说明​​​​1.1程序组织​​​​1.2数据结构​​......
  • JavaWeb课程上用到的方法-11.22
    PrintWriterwriter=resp.getWriter();//响应流StringcontextPath=req.getContextPath();//返回站点根目录resp.sendRedirect(contextPath);//重定向Enumeration<S......
  • Java设计模式 - 24种
    设计模式的七大原则   开闭原则:对扩展开放、对修改关闭。   单一指责原则:一个类只做一件事。   依赖倒转原则:类似于ioc,采用接口编程。   迪米特原则:高内聚......
  • Java中的Iterator迭代器详解
    ......
  • 这11个JavaScript小技巧,你在大多数教程中是找不到的!
    英文原文| ​​https://medium.com/@bretcameron/12-javascript-tricks-you-wont-find-in-most-tutorials-a9c9331f169d​​​当我开始学习JavaScript时,我把我在别人的代......