一 jdk
1.1 查看jdk的版本
1.2 jdk的模式
1.-xint 为解释模式
2.-xcomp 为编译模式
3.xmixed为混合模式
1.3 设置初始堆大小和最大堆大小
-xms:设置jvm的堆内存的初始大小
-xmx:设置jvm的堆内存的最大大小
-xmx2048m;等价于-xx:MaxHeapSize,设置为2g
-xms512; 等价于-xx:InitialHeapSize;设置为512m;
适当的调整jvm的内存大小,可以充分利用服务器的资源,让程序跑的更快。
例如: java -jar -xms512m -xmx2048m testjar.jar
1.4 查看java进程
jps -l
1.5 查看正在运行程序的参数
jinfo -flags 进程id
1.6 jdk的内存模型
1.6.1 jdk1.7的内存模型
堆内存分为年轻代,年老代,永久代
其中年轻代又分为两个等量且较小空间的survivor空间和一个Eden空间
1.6.2 jdk1.8的内存模型
年轻代:eden+survivor*2
老年代:OldGen
1.6.3 jdk1.7与1.8的区别
1.jdk1.8不再设置永久区,改为metaspace(元数据空间),metaspace所使用的内存空间是本地内存空间,而不是虚拟机内部空间。
1.6.4 为何要使用metaspace代替永久区
永久代经常不够用会报出内存泄漏,报出异常:java.lang.outofmemoryError:PermGen;基于此将永久区废弃,改为用元空间,改为了使用本地内存空间。
1.7 通过jstat命令进行查看堆内存使用情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
1.7.1 统计class的加载情况
[root@node01 ~]# jstat -class 6219
Loaded Bytes Unloaded Bytes Time
3273 7122.3 0 0.0 3.98
说明:
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
1.7.2 垃圾回收的统计
说明:
- S0C:第一个Survivor区的大小(KB)
- S1C:第二个Survivor区的大小(KB)
- S0U:第一个Survivor区的使用大小(KB)
- S1U:第二个Survivor区的使用大小(KB)
- EC:Eden区的大小(KB)
- EU:Eden区的使用大小(KB)
- OC:Old区大小(KB)
- OU:Old使用大小(KB) - M
- MC:方法区大小(KB)
- MU:方法区使用大小(KB)
- CCSC:压缩类空间大小(KB)
- CCSU:压缩类空间使用大小(KB)
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间