Class NewObject {
int count;
boolean flag;
Object ob;
}
其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。
idea bin/idea.exe.vmoptions默认参数
-server jvm使server模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境
-Xms128m
-Xmx512m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
idea下的run configuration
java -Xmx3550m -Xms3550m -Xmn2g -Xss1m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MetaspaceSize=128m -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。 -XX:MetaspaceSize=128m (默认20m)!!!我设置太小 Full gc
XX:MaxMetasaceFreeRatio 也就是70%。会回收 MaxMetaspaceSize=N 默认值为4294967295B(大约4096MB)。
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
-XX:+PrintGC -XX:PrintHeapAtGC
-XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器) 1.9支持
查看jvm状态
jdk/bin目录下点击jconsole.exe即可启动 VisualVM
jconsole概览图和主要的功能:概述、内存、线程、类、VM、MBeans
通过top指令发现,当前5511的线程cup和内存的使用率过高
jinfo pid 5511
jstat gcacuse 5511
jmap -heap 5511
jstack 5511 | head -50
Java版的ps命令,查看java进程及其相关的信息,如果你想找到一个java进程的pid,那可以用jps命令替代linux中的ps命令了
jinfo是用来查看JVM参数和动态修改部分JVM参数的命令
jinfo 11666
jstat命令是使用频率比较高的命令,主要用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等。
jstat -gcutil 11666 1000 3
jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合
jmap是用来生成堆dump文件和查看堆相关的各类信息的命令
jhat是用来分析jmap生成dump文件的命令,jhat内置了应用服务器
https://www.cnblogs.com/wxisme/p/9878494.html