内存区域划分就是将执行Java程序过程中的内存分为若干个不同区域,根据JDK版本的不同有所差别:
在多线程中,区域划分主要分为两种:线程共享和线程私有
在JDK1.6 中
线程共享:堆,方法区
线程私有:虚拟机栈、本地方法栈、程序计数器
在JDK1.7 中
字符串常量池 被从方法区拿到了堆中, 运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代。
JDK1.8开始
取消了Java方法区,取而代之的是位于直接内存的元空间(MetaSpace)。这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace) 。而元空间是本地直接内存中的。