方法区
各线程共享,存储了每个类的结构信息。方法区是规范,不同虚拟机你实现是不同的,最典型的是永久代和元空间。
堆
一、新生代(1/3)
1、伊甸区(Eden Space)(8/10)
2、幸存者0区(1/10)
3、幸存者1区(1/10)
二、老年代(2/3)
三、元空间
用于存放JDK自身携带Class,Interface的元数据,即自身运行环境必须的类信息,被装载进此区域的数据不会被垃圾回收器回收,只有JVM关闭才会释放此区域占用的内存。
Java8的元空间不在虚拟机中,在本机物理内存。
虽然JVM规范将方法区设为堆的一个逻辑部分,但它却有一个别名叫非堆。
元空间是方法区的一个实现。
栈
1、本地变量:输入输出参数以及方法内的变量
2、栈操作:记录出栈、入栈操作
3、栈帧数据:包括类文件、方法等
本地方法栈
和栈差不多,只不过是放本地方法(native修饰的方法,底层C/C++实现)
程序计数器
每一个线程都有一个程序计数器,它是当前程序所执行的字节码的行号指示器。如果执行native方法,PC则是空的。就是计算机组成与体系结构这门课学过的程序计数器。
类装载子系统