美文网首页
Java内存分析

Java内存分析

作者: yoga0108 | 来源:发表于2017-02-25 15:34 被阅读0次

今天工作需要测试一段代码是否有效执行了对象的回收,期间使用了java内存分析工具等,总结知识点。

  • jmap
  • jstat
  • jhat
  • mat
  • java 内存模型
  • java GC

Jmap

生成堆快照

  • jmap -heap :当前堆内存分布信息,如From space, To Space等占用内存大小
  • jmap -histo : 当前堆中对象占用内存大小情况,柱状图数据结构组织。可以简单得定位下当前占用内存最大的几个对象
  • jmap -histo:live:先触发一次gc , 再统计对象占用内存情况。可以简单得定位下当前占用内存最大的几个对象以及对象是否可以被gc回收
  • jmap -dump:format=b,file=heapDump: 导出堆详细使用信息,b表示二进制文件,之后采用其他工具分析,如jhat,mat.非常详细,可分析到对象之间的引用关系等。

Jstat

显示进程中的类装载、内存、垃圾收集、JIT编译等运行数据
目前感觉用上的都是gc记录查看,实际还没太用过

  • jstat -gc 3331 250 20: 查询进程2764的垃圾收集情况,每250毫秒查询一次,一共查询20次。
  • jstat- gcause

Jhat

可用来分析 jmap dump生成的堆信息二进制文件。html形式显示对象占用内存大小以及引用情况,但显示得并不友好。感觉比较鸡肋。

  • jhat file

mat

eclipse提供的jvm 内存分析工具,图形化界面,很好用。 可分析引用(出度,入度),引用的内容等,强烈推荐,idea不带这种插件,可以单独下。如果要分析的堆文件太大,可能oom,需要修改MemoryAnalyzer.ini 里启动的jvm参数。

java 内存模型

如图

内存模型.png

至于oom以及相应的jvm参数,还有很多细节。Jdk 1.8中已经删除了perSize相关参数。oom什么情况下会产生,跟gc的方式也相关。后续继续。

java GC

在oom试验中,设置了perSize=10m maxPerSize=10m ,通过string.intern循环产生string常量,却一直没有perm gen oom.查看jmap -heap ,发现内存中ps old gen 已经600M+, per gen 2m+.为什么?

相关文章

  • JDK的bin下的工具有哪些功能

    Java生产环境下问题排查 Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息 Java内存泄漏分析系...

  • 原:进阶

    1.java基础知识 2.设计模式 3.内存分析 Android内存分析内存分析 4.性能优化 Android性能...

  • Android 内存泄漏相关总结

    一.Java内存分配结构复习 1.Java内存分配策略 上一篇Android内存管理分析总结中我们提到了Java内...

  • Java编程中对象内存空间占用分析

    Java编程中,了解对象的内存开销非常重要。本文主要分析Java语言中对象的内存占用。 1、Java对象内存占用简...

  • Java对象内存分析

    此处对象内存分析只针对Java基本对象,暂不对集合对象进行剖析。 内存 栈内存 堆内存

  • Elasticsearch内存

    核心概念 基于Lucene Java应用 内存使用分析 Lucene的内存消耗 倒排索引。(堆内存)Lucene中...

  • java 基础

    JAVA 字符串 参考资料:一张图让你明白 java string 的 内存分配java 字符串内存分配的分析与总...

  • Java内存分析

    内存如下图所示: 案例二:

  • Java内存分析

    今天工作需要测试一段代码是否有效执行了对象的回收,期间使用了java内存分析工具等,总结知识点。 jmapjsta...

  • java内存分析

    0.寄存器:寄存器是存在在cpu上的。而内存是挂在数据总线的,数据总线就是用来决定传输数据的大小。而就是通过在寄存...

网友评论

      本文标题:Java内存分析

      本文链接:https://www.haomeiwen.com/subject/mdlpwttx.html