1、堆区(heap)— (线程共享)jvm只有一个堆区,存放对象
2、栈区(stack)— (线程私有)每个线程包含一个栈区,存放函数的参数值,局部变量的值等,
分为:java虚拟机栈和本地方法栈,java虚拟机栈为虚拟机执行java方法服务,本地方法栈为虚拟机使用到Native方法服务
3、方法区—(又叫全局区、静态区,线程共享)存放已被虚拟机加载的类信息、属性信息、方法信息、静态变量、全局变量、即时编译器编译后的代码等数据。
方法区又包括运行时常量池,用于存放程序运行期间生成的新的常量
4、程序计数器--(线程私有)当前线程所执行的字节码的行号指示器
采用new 创建的字符串对象是存储在堆中,不进入字符串常量池,调用intern()方法后会进入字符串常量池。
--------
8张图 带你理解Java内存区域 - SegmentFault 思否
很多人会误以为Java内存区域和内存模型是同一个东西,其实并不是。
Java内存区域<