JVM结构
来自随意问技术百科
运行时数据区域
- 堆(Heap)
- 共享内存区域,存放对象实例
- 垃圾回收(GC)主要区域
- 新生代(Eden、From Survivor、To Survivor)和老年代
- 方法区(Method Area)
- 线程共享内存区域
- 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
- 永久代,非堆
- 其中有一部分是运行时常量池,类加载后存放编译期间生产的各种字面量(string, final修饰的基本类型)和符号引用,还可以存放动态常量(运行期间产生的常量,如String.intern())
- 虚拟机栈(VM Stack)
- 线程私有
- 执行java方法
- 本地方法栈(Native Method Stack)
- 与虚拟机栈类似
- 线程私有
- 执行Native方法
- 程序计数器(Program Couter Register)
- 线程私有
- 当前线程所执行字节码的行号指示器
非运行时数据区
- 直接内存
- NIO
- 不受Java堆大小的限制,受到本机总内存和处理器寻址空间的限制