JVM的内存分为堆、栈、方法区和程序计数器4个区域
存储内容:基本类型,对象引用,对象本身,class,常量,static变量
堆:
拥有者:所有线程
内容:对象本身,不存放基本类型和对象引用
垃圾回收:由gc控制,java的垃圾回收主要针对堆
----------------------------------------------------------
栈:
分为虚拟机栈和本地方法栈
虚拟机栈:
java方法内存模型
拥有者:每个线程拥有一个
内容:基本数据,对象引用(最常用)
垃圾回收:程序自动出栈释放
本地方法栈:
为native方法服务
----------------------------------------------------------
方法区(静态区):
拥有者:所有线程
内容:class类型、常量、static变量(整个程序中唯一的元素)和常量池
备注:方法区属于一个逻辑概念,是堆的一个逻辑部分,不同虚拟机对其有不同的实现,例如jdk1.8之前HotSpot用“永久代”来实现方法区,在之后用“元空间”实现方法区