SlideShare uma empresa Scribd logo
1 de 47
JVM Memory
  2013.4.19 Xuefeng.Wu
  Benewu(at)gmail.com
Agenda
• JVM Memory Layout with flag and OOM
• GC
• Debug tools



http://docs.oracle.com/javase/specs/

 Run-Time Data Areas
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5
Memory
JVM memory overview
JVM Memory Parametes
Code
References and objects
Runtime Data Area
VM
http://www.2cto.com/kf/201108/99433.html
Java Object Heap
• -Xmx,-Xms,-Xmn

• Eden, Survivor Space

• -XX:NewRatio =80%, -XX:Survivor

• Old Generation --- Long live, Big Object

• Demo:BigObject.java
Perm Space
•   -XX:MaxPermSize=128m

• Classes, method
• String pools
Code Generation
• Bytecode to native code

• 10k calls

• JVM will crash
Socket Buffer
• Revieve ~37K
• Send ~25k

• Java.lang.StackOverflowError

• Demo: SocketBuffer.java
• Too many open files
Thread stack
• -Xss

• Each thread has a separate memory space

• Default value dependence on OS

• Demo: ThreadAllocation.java
Direct Memory Space
• Map memory outside the java object heap

• Java.nio.ByteBuffer.allocateDirect

• -XX:MaxDirectMemorySize=<value>
JNI
• JNI programs allocate memory
GC
• Threads
• GC information
GARBAGE
COLLECTION
How does garbage
 collection work?
JVM roots
基本GC收集算法
• 复制(copying)
• 标记清除(mark-sweep)
• 标记整理(mark-sweep-compact)
复制(copying)
标记清除(mark-sweep)
标记整理(mark-sweep-
   compact)
GC收集器类型
• 古老的串行收集器(Serial Collector)
• 吞吐量优先的并行收集器(Throughput Collector)
• 暂停时间优先的并发收集器(Concurrent Low Pause
  Collector-CMS)
• 增量并发收集器(Incremental Concurrent-Mark-
  Sweep/i-CMS)
古老的串行收集器(Serial
   Collector)
吞吐量优先的并行收集器
(Throughput Collector)




              -XX:+UseParallelGC
(Concurrent Low Pause
   Collector-CMS)




             -XX:+UseConcMarkSweepGC
Concurrent-Mark-Sweep/i-
         CMS)
SUN JDK GC
JVM parameters in Java




http://javarevisited.blogspot.com/2011/11/hotspot-jvm-options-java-
examples.html
Tools
JVM Tools
jps(Java Virtual Machine
     Process Status Tool)
• 用来查看基于HotSpot JVM里面所有进程的具体状态, 包
  括进程ID,进程启动的路径等等。

• jps [ options ] [ hostid ]
jstack(Java Stack Trace)
• jstack用于打印出给定的java进程ID或core file或远程调
  试服务的Java堆栈信息,如果是在64位机器上,需要指
  定选项"-J-d64“

• jstack [-l] pid
jstat(Java Virtual Machine
 Statistics Monitoring Tool)
• Jstat是JDK自带的一个轻量级小工具。利用JVM内建的指
  令对Java应用程序的资源和性能进行实时的命令行的监
  控,包括了对Heap size和垃圾回收状况的监控。

• jstat [ generalOption | outputOptions vmid [interval
  [s|ms] [count]] ]
jmap(Java Memory Map)
• 打印出某个java进程(使用pid)内存内的,所有‘对象’的
  情况(如:产生那些对象,及其数量)。

• jmap -J-d64 -heap pid
• jmap -dump:format=b,file=test.bin 4939
jhat(Java Heap Analyse To
            ol)
• jhat是一个Java堆复制浏览器。这个工具分析Java堆复
  制文件(例如,由上面的"jmap -dump"所产生的)。
  Jhat启动一个允许堆中的对象在web浏览器中进行分析
  的web服务器。

• jhat -J-mx768m -port <端口号:默认为7000>
  heap.dmp
jvisualvm
BTrace
BTrace
Btrace script




                Demo
JMX
• JMX(Java Management Extensions,即Java管理扩
  展)是Java平台上为应用程序、设备、系统等植入管理
  功能的框架。
JMSMonitor
  -Dcom.sun.management.jmxremote.port=3333 -
  Dcom.sun.management.jmxremote.ssl=false -
  Dcom.sun.management.jmxremote.authenticate=false -
  Djava.rmi.server.hostname=10.112.37.92

JMXServiceURL url = new
JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi");

JMXConnector jmxConnector = JMXConnectorFactory.connect(url);

MBeanServerConnection serverConn =
jmxConnector.getMBeanServerConnection();

MBeanServerConnection serverConn =
jmxConnector.getMBeanServerConnection();
                                                  Demo:JMSMonitor.java
Println(memoryMXBean.getHeapMemoryUsage().getUsed());
MBeans
Jvm memory

Mais conteúdo relacionado

Mais procurados

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangCeph Community
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)Kris Mok
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇bluedavy lin
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuningpprun
 
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang LiDesign realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang LiCeph Community
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrameChen-en Lu
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserverDin Dindin
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLei (Harry) Zhang
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收Tony Deng
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Yang Guanjun
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStackRongze Zhu
 
HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙bluedavy lin
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
并发编程交流
并发编程交流并发编程交流
并发编程交流bluedavy lin
 

Mais procurados (20)

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
Golang advance
Golang advanceGolang advance
Golang advance
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Java GC Tuning
Java GC TuningJava GC Tuning
Java GC Tuning
 
Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
 
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang LiDesign realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang Li
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserver
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The Hood
 
Ceph intro
Ceph introCeph intro
Ceph intro
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStack
 
HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
并发编程交流
并发编程交流并发编程交流
并发编程交流
 
Ceph perf-tunning
Ceph perf-tunningCeph perf-tunning
Ceph perf-tunning
 

Semelhante a Jvm memory

淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化丁 宇
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
Jvm那些事
Jvm那些事Jvm那些事
Jvm那些事dynamiclu
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析beiyu95
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能beiyu95
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
JVM 初探
JVM 初探JVM 初探
JVM 初探zyh
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shootingMin Zhou
 

Semelhante a Jvm memory (20)

淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
Jvm那些事
Jvm那些事Jvm那些事
Jvm那些事
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
JVM 初探
JVM 初探JVM 初探
JVM 初探
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shooting
 

Jvm memory

Notas do Editor

  1. http://avricot.com/blog/index.php?post/2010/05/03/Get-started-with-java-JVM-memory-(heap%2C-stack%2C-xss-xms-xmx-xmn...)
  2. http://www.wilsonmar.com/1javagc.htm
  3. the stack is the area of memory where local variables (including method parameters) are stored.http://marakana.com/bookshelf/java_fundamentals_tutorial/object_oriented.html
  4. http://www.researchbeta.com/?p=334其中黄色的是线程共享的,白色是线程私有的。我们每个部分分析过来。程序计数器(program counter register)这个可以认为是一个运行指针,指向下一个要运行的命令。用来实现循环、判断、线程切换等功能。Java虚拟机栈(java stack)这个就是大家经常说的堆栈中的栈了,用来存放函数运行状态,比如函数的变量、返回值类型、动态链接等。每个函数开始运行,就会创建一个栈帧。然后随着函数返回,而消亡。本地方法栈(native method stack)用来存放native函数的栈,和java stack功能差不多堆(Heap)这个就是存放几乎所有object的地方了,是一块非常大的内存区域,可以不连续。然后,这是GC的主战场。方法区(method area)这部分是存放类的类型数据,比如一个class的子父类、接口等。以及常量和静态变量。这部分比较少变化,有人称他为永久代。GC也会在这里做一些收集,但是效果一般。
  5. http://www.slideshare.net/gengmao/inside-the-jvm-memory-management-and-troubleshooting
  6. http://www.slideshare.net/jaxconf/understanding-java-garbage-collection-and-what-you-can-do-about-it-gil-tene
  7. http://chaoticjava.com/posts/how-does-garbage-collection-work/
  8. http://lory-yang.com/2012/09/04/jvm/Java采用了根搜索方法GC,一般是从GC根开始全部搜索一边,所有没有被搜到的,都是垃圾,可以被清理。这个算法可以消除循环引用造成的影响。也就是循环引用的对象依然会被GC。GC root包括以下四种:栈中的变量引用的对象方法区中的静态属性引用的对象方法区中的常量引用的对象JNI引用的对象
  9. 将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。
  10. 收集器先从根开始访问所有活跃对象,标记为活跃对象。然后再遍历一次整个内存区域,把所有没有标记活跃的对象进行回收处理。该算法遍历整个空间的成本较大暂停时间随空间大小线性增大,而且整理后堆里的碎片很多。
  11. 综合了上述两者的做法和优点,先标记活跃对象,然后将其合并成较大的内存块。
  12. http://exceptioneye.iteye.com/blog/1535081
  13. -XX:+UseParallelGC:这是JDK5 -server的默认值。策略为:年轻代:暂停应用程序,多个垃圾收集线程并行的复制收集,线程数默认为CPU个数,CPU很多时,可用-XX:ParallelGCThreads= 设定线程数。年老代:暂停应用程序,与串行收集器一样,单垃圾收集线程标记整理。如上可知该收集器需要2+的CPU时才会优于串行收集器,适用于后台处理,科学计算。可以使用-XX:MaxGCPauseMillis= 和 -XX:GCTimeRatio来调整GC的时间。
  14. -XX:+UseConcMarkSweepGC:这是以上两种策略的升级版,策略为:年轻代:同样是暂停应用程序,多个垃圾收集线程并行的复制收集。年老代:则只有两次短暂停,其他时间应用程序与收集线程并发的清除。若要采用标记整理算法,则可以通过设置参数实现;
  15. 虽然CMS收集算法在最为耗时的内存区域遍历时采用多线程并发操作,但对于服务器CPU资源不够的情况下,其实对性能是没有提升的,反而会导致系统吞吐量的下降,为了尽量避免这种情况的出现,就有了增量CMS收集算法,就是在并发标记、清理的时候让GC线程、用户线程交叉运行,尽量减少GC线程的全程独占式执行;
  16. http://www.slideshare.net/kensipe/debugging-your-production-jvm
  17. http://blog.csdn.net/fenglibing/archive/2011/05/11/6411932.aspx3、常用参数说明-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。-v 输出传给JVM的参数。4、使用示例fenglibin@libin:~$ jps11644 Main1947 12843 Jps fenglibin@libin:~$ jps -v11644 Main -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:43467 -Dfile.encoding=GBK1947  -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx512m12858 Jps -Denv.class.path=/home/fenglibin/java6/lib/dt.jar:/home/fenglibin/java6/lib/tools.jar::/usr/bin/libtool:/usr/bin/autoconf:/usr/local/BerkeleyDB.4.8/lib -Dapplication.home=/home/fenglibin/java6 -Xms8mfenglibin@libin:~$ jps -l11644 com.alibaba.china.webww.core.Main12870 sun.tools.jps.Jps1947
  18. http://blog.csdn.net/fenglibing/archive/2011/05/11/6411940.aspx如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。jstack [ option ] pidjstack [ option ] executable corejstack [ option ] [server-id@]remote-hostname-or-IP3、常用参数说明1)、options: executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)core 将被打印信息的core dump文件remote-hostname-or-IP 远程debug服务的主机名或ipserver-id 唯一id,假如一台主机上多个远程debug服务 2)、基本参数:-F当’jstack [-l] pid’没有相应的时候强制打印栈信息-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.-m打印java和native c/c++框架的所有栈信息.-h | -help打印帮助信息pid 需要被打印配置信息的java进程id,可以用jps查询.
  19. http://blog.csdn.net/fenglibing/article/details/64119513、参数说明1)、generalOption:单个的常用的命令行选项,如-help, -options, 或 -version。2)、outputOptions:一个或多个输出选项,由单个的statOption选项组件,可以-t, -h, and -J选项配合使用。statOption:   -class Option   -compiler Option   -gc Option   -gccapacity Option   -gccause Option   -gcnew Option   -gcnewcapacity Option   -gcold Option   -gcoldcapacity Option   -gcpermcapacity Option   -gcutil Option   -printcompilation Option注:其中最常用的就是-gcutil选项了,因为他能够给我们展示大致的GC信息。Option:指的是vmid、显示间隔时间及间隔次数等vmid    — VM的进程号,即当前运行的java进程号interval– 间隔时间,单位为秒或者毫秒count   — 打印次数,如果缺省则打印无数次3)、jstat命令输出参数说明S0  — Heap上的 Survivor space 0 区已使用空间的百分比S0C:S0当前容量的大小S0U:S0已经使用的大小S1  — Heap上的 Survivor space 1 区已使用空间的百分比S1C:S1当前容量的大小S1U:S1已经使用的大小E   — Heap上的 Eden space 区已使用空间的百分比EC:Eden space当前容量的大小EU:Eden space已经使用的大小O   — Heap上的 Old space 区已使用空间的百分比OC:Old space当前容量的大小OU:Old space已经使用的大小P   — Perm space 区已使用空间的百分比OC:Perm space当前容量的大小OU:Perm space已经使用的大小YGC — 从应用程序启动到采样时发生 Young GC 的次数YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)FGC — 从应用程序启动到采样时发生 Full GC 的次数FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
  20. http://blog.csdn.net/fenglibing/art可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid&gt;a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool),使用参见:http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.aspx)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。64位机上使用需要使用如下方式:jmap -J-d64 -heap pid2、命令格式SYNOPSIS       jmap [ option ] pid       jmap [ option ] executable core       jmap [ option ] [server-id@]remote-hostname-or-IP3、参数说明1)、options: executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)core 将被打印信息的core dump文件remote-hostname-or-IP 远程debug服务的主机名或ipserver-id 唯一id,假如一台主机上多个远程debug服务 2)、基本参数:-dump:[live,]format=b,file=&lt;filename&gt; 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. -finalizerinfo 打印正等候回收的对象的信息.-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来. -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效. -h | -help 打印辅助信息 -J 传递参数给jmap启动的jvm. pid 需要被打印配相信息的java进程id,创业与打工的区别 - 博文预览,可以用jps查问.4、使用示例1)、[fenglb@ccbu-156-5 ~]$ jmap -histo 4939[输出较多这里不贴了]2)、[fenglb@ccbu-156-5 ~]$ jmap -dump:format=b,file=test.bin 4939Dumping heap to /home/fenglb/test.bin ...Heap dump file createdicle/details/6411953
  21. http://piotrnowicki.com/2012/05/btrace-a-simple-way-to-instrument-running-java-applications/
  22. http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html