文章字数:482,阅读全文大约需要1分钟
内存区域
栈
-Xss
堆
-Xms最小值-Xmx最大值-Xmn新生代最小-XX:newSize新生代最小值-XX:MaxNewSize新生代最大值
永久代(元空间)
-XX:PermSize -XX:MaxPermsize1.7及之前最小值和最大值-XX:MetaspaceSize -XX:MaxMetaspaceSize1.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对象时使用同一区域而加锁导致串行