内存区域
栈
-Xss
堆
-Xms
最小值
-Xmx
最大值
-Xmn
新生代最小
-XX:newSize
新生代最小值
-XX:MaxNewSize
新生代最大值
永久代(元空间)
-XX:PermSize
-XX:MaxPermsize
1.7及之前最小值和最大值
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
1.8及之后
方法区移动至运行时常量池之外,即元空间
直接内存
- 不是虚拟机运行时数据区的一部分,也不是java虚拟机规范定义的内存区域
-
NIO
中会频繁使用这块区域,java堆内可以使用directByteBuffer
对象直接引用操作 - 此区域不受java堆大小限制,但也受本机总内存限制,可以通过
MaxDirectMemorySize
设置,默认和堆内存最大值一样,所有也会OOM
ByteBuffer b = ByteBuffer.allocateDirect(1024 * 14);
逃逸分析
-server
使用server
模式运行(只有这个有逃逸分析),还有client
模式,mix
表示自动判断
-Xmx10M -Xms10m
堆大小
-XX+PrintGC
打印GC日志
-XX:-EliminateAllocations
标量替换
-XX:-UseTLAB
事先为每个线程分配一个私有空间ThreadLocalAllocBuffer,可以避免线程new对象时使用同一区域而加锁导致串行