Date post: | 25-May-2015 |
Category: |
Technology |
Upload: | benewu |
View: | 773 times |
Download: | 23 times |
JVM Memory2013.4.19 Xuefeng.WuBenewu(at)gmail.com
Agenda• JVM Memory Layout with flag and OOM• GC• Debug tools
http://docs.oracle.com/javase/specs/
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5
Run-Time Data Areas
Memory
JVM memory overview
JVM Memory Parametes
Code
References and objects
Runtime Data Area
VM
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
增量并发收集器 (Incremental 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 [interv
al[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 Tool)
• 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
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();
Println(memoryMXBean.getHeapMemoryUsage().getUsed());
-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
Demo:JMSMonitor.java
MBeans