一、方法区
JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据。
虚拟机规范中这是一个逻辑区划。具体实现根据不同虚拟机来实现。如:oracle的HotSpot在java7中方法区放在永久代,java8放在元数据空间,并且通过GC机制对这个区域进行管理
二、堆内存
堆内存还可以细分为:老年代、新生代 (Eden、From Survivor、To Survivor)
JVM启动时创建,存放对象的实例。垃圾回收器主要就是管理堆内存。如果满了,就会出现OutOfMemroyError,后续在内存模型中,详细讲解。
三、虚拟机栈
虚拟机栈,每个线程都在这个空间有一个私有的空间。
线程栈由多个栈帧 (Stack Frame) 组成。
一个线程会执行一个或多个方法,一个方法对应一个栈帧。栈帧内容包含:局部变量表、操作数栈、动态链接、方法返回地址、附加信息等。栈内存默认最大是1M,超出则抛出StackOverflowError