JVM HEAP内存空间
新生代
新生区(Eden):初创对象
存活区(Survivor):不如成熟期的初创对象
to(ss1):
from(ss2):
老年代:
mark --> compact 标记,打包,删除
持久代:
垃圾回收器
新生代回收:
Minor GC
老年代回收:
Major GC(full GC)
堆内存空间的调整参数:
-Xmx:新生代和老年代总共可用的最大空间
-Xms:新生代和老年代初始空间
-XX:NewSize 新生代的初始空间
-XX:MaxNewSizeSize 新生代的最大空间
-XX:MaxPermSize 持久代的最大空间
-XX:PermSize 持久代初始空间
对于Tomcat而言:
catalina.sh中有两个环境变量
CATALINA_OPTS:就对启动运行Tomcat实例的java虚拟机有效
JAVA_OPTS:对本级的所有JAVA虚拟机有效
性能监控工具:
问题:
可能导致的原因是
1.内存不足 OutOfMemoryError
2.也有可能是代码中内存泄露
3.线程死锁
4.锁竞争(Lock Contenttion)
5.java消耗过多CPU
jps (java virtual machine process status tool)
监控jvm进程的状态信息
位置:在java/bin目录下
使用方法:
1.查看进程jps
2.查看详细的进程号 jps id
jstack:查看某个java进程内的线程堆栈信息
jstack pid
jstack -l :输出完整的锁信息
jstack -m :混合输出java堆栈和C/C++信息
jmap和jhat:
jmap:jvm memory map 查看堆内存的使用情况
jmap id 查看某个id的内存详细使用状况
jmap -heap id 查看堆内存的详细使用情况
jhat:java heap analysis tools
jstat:jvm统计监测工具
jstat -gc 进程id 可以统计出详细的垃圾回收器的信息
字段的含义:
S0C,S1C,S0U,S1U:C标识容量,U标识已用量
EC,EU,eden区域的容量和已用量
OC,OU 老年代大小 老年代使用大小
PC,PU
YGC,YGT:新生代GC和耗时
FGC,FGCT:FULL GC的次数和耗时
GCT:GC总耗时
两个GUI(可视化)工具,jconsole,jvisualvm