JVM内存的结构
JVM的组成有一下五部分:
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
程序计数器(寄存器) 私有
作用:记住下一条JVM指令的执行地址
特点:
- 是线程私有的
- 不存在内存溢出
虚拟机栈 私有
定义:
- 每个线程运行时所需要的内存,成为虚拟机栈
- 每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
本地方法栈 私有
Nativemethodstack(本地方法栈):保存native方法进入区域的地址。
堆 共有
Heap堆:通过new关键字,创建对象都会使用堆内存
特点:
- 它是线程共享的,堆中对象都需要考虑线程安全的问题
- 有垃圾回收机制
方法区
方法区在1.6是永久代实现的,1.8是元空间实现的。Metaspace(元空间)是Class、ClassLoader,常量池组成的。就是保存类的一些信息。