文章字数:482,阅读全文大约需要1分钟
内存区域
栈
-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
1 | ByteBuffer b = ByteBuffer.allocateDirect(1024 * 14); |
逃逸分析
-server
使用server
模式运行(只有这个有逃逸分析),还有client
模式,mix
表示自动判断-Xmx10M -Xms10m
堆大小-XX+PrintGC
打印GC日志-XX:-EliminateAllocations
标量替换-XX:-UseTLAB
事先为每个线程分配一个私有空间ThreadLocalAllocBuffer,可以避免线程new对象时使用同一区域而加锁导致串行