大多数 JVM 将内存区域划分为 方法区 , 堆, 程序计数器 , 虚拟机栈(也有翻译成JAVA 方法栈的), 本地方法栈 ,其中方法区 ,堆 是线程共享的 ,程序计数器 , 虚拟机栈, 本地方法栈 是非线程共享的, 即是线程隔离的
一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行,JVM初始运行的时候都会分配好 方法区 和 堆 ,而JVM 每遇到一个线程,就为其分配一个程序计数器 , 虚拟机栈和本地方法栈, 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉
堆是Java虚拟机所管理的内存中最大的一块,它是所有线程共享的一块内存区域。几乎所有的对象实例和数组都在这类分配内存。Java Heap是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆TUI”
方法区也是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区域又被称为“永久代”
虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的