博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jconsole使用
阅读量:5098 次
发布时间:2019-06-13

本文共 1190 字,大约阅读时间需要 3 分钟。

先看一张图

根据JConsole和任务管理器对比,堆内存大小在250M左右,差不多空跑一个程序用idea启动springboot就是这个大小

项目启动初始类在一万个左右,活动线程50个上下,cpu利用率可以忽略。

idea工具本身占用内存在1.7G,这个貌似有点大,具体的内存使用需要后续学习?

google浏览器1G内存感觉也是逆天了。

内存分析这张图比较重要,每一个含义需要搞清楚

说明:

老年代  PS Old Gen

新生代 PS Eden Space 对象创建存放的区域

新生代 PS Survivor Space 第一次GC之后存放的区域

代码缓存 Code Cache jvm编译和存储本地代码所占用的内存

本地内存也叫元空间 Metaspace 永久代PermGen从JDK8开始被metaspce替代 (jdk8新概念)

类指针压缩空间  Compressed Class Space  (jdk8新概念)

回收的顺序如下

JDK6回收

jDK8回收

 

对metaspace 和 compressed class space做一个专门的解释,看完即懂

先看一张metaspce内存分配图

 

 解释 CL是class loader的简写,从本地加载,然后根据一定的算法把二进制字节码加载到元空间

持久代中存的内容

       1. JVM中类的元数据在Java堆中的存储区域。
       2. Java类对应的HotSpot虚拟机中的内部表示也存储在这里。
       3. 类的层级信息,字段,名字。
       4. 方法的编译信息及字节码。
       5. 变量
       6. 常量池和符号解析
GC是可以对持久代进行垃圾收集的   既然JDK8取消了持久代用元数据替代,那么元数据存储的内容就是持久代中存储的内容

元空间特点

  1. 充分利用了Java语言规范中的好处:类及相关的元数据的生命周期与类加载器的一致。
  2. 每个加载器有专门的存储空间
  3. 只进行线性分配
  4. 不会单独回收某个类
  5. 省掉了GC扫描及压缩的时间
  6. 元空间里的对象的位置是固定的
  7. 如果GC发现某个类加载器不再存活了,会把相关的空间整个回收掉

Compressed Class Space

看图对照解释

JVM中,每个对象都有一个指向它自身类的指针,不过这个指针只是指向具体的实现类,而不是接口或者抽象类。

 64位的JVM  _Mark 占8个字节常量 _klass 指向类的8个字节的指针 

 为了压缩JVM对象中的_klass指针的大小,引入了类指针压缩空间(Compressed Class Pointer Space)。

 从字面上看内存的分析应该是最简单的了

下面线程这个图感觉有点蒙圈

后续再详细分析

类图  加载了一万个

VM概要 对内存的一个补充

MBean也是非常的使用

 

转载于:https://www.cnblogs.com/mutong1228/p/10290906.html

你可能感兴趣的文章
网络编程
查看>>
POJ -2236 Wireless Network
查看>>
CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
查看>>
无向图求桥 UVA 796
查看>>
Nginx+Keepalived 实现双击热备及负载均衡
查看>>
五分钟搭建WordPress博客(二)
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
确认是否是因为做了物理I/O而导致的性能不佳
查看>>
Something-Summary
查看>>
Spring学习笔记
查看>>
6个有用的MySQL语句
查看>>
JMeter-生成性能测试结果报告
查看>>
linux c/c++ IP字符串转换成可比较大小的数字
查看>>
我对前端MVC的理解
查看>>
sql: table,view,function, procedure created MS_Description in sql server
查看>>
[网络流24题] 最长k可重区间集问题 (费用流)
查看>>
路径依赖理论
查看>>
ActiveX多线程回调JavaScript
查看>>
剑指offer系列32-----对称二叉树的判断
查看>>