JVM 的内存区域有哪些?
先自己想一想,再看参考要点
参考要点
- 线程私有:程序计数器、Java 虚拟机栈(每个方法一个栈帧,-Xss 设置大小)、本地方法栈
- 线程共享:堆(几乎所有对象,分新生代和老年代,-Xms、-Xmx 设置)和方法区(类的元信息和运行时常量池,JDK 8 起由本地内存中的元空间实现;字符串常量池和静态变量 JDK 7 起已移到堆中,JIT 编译的代码在单独的代码缓存中)
- NIO 还会使用堆外的直接内存
- 除程序计数器外都可能 OOM,两种栈还可能 StackOverflowError