基本构成
JVM主要构成如下如下图:
类加载系统
类加载主要负责类的加载,校验,准备,解析,初始化。
详细见:JVM类装载机制
JVM内存结构
元数据空间
JDK 7之前称为方法区或者永久区,主要存放的是类的元数据信息,如:类名,属性名,方法名,常量值等等。比如:
public class Demo1 {
int a ;
public static void main(String[] args) {
String name = "rongoof";
}
}
我们可以通过jbe下载地址工具打开,查看字节码信息。
元数据区属于堆外直接内存,所以也是线程共享的内存空间。
元数据区如果不指定大小的话,可用大小就是机器的物理内存。可以通过
-XX:MetaspaceSize 参数限制其大小,
JDK7可以通过
-XX:MaxPermSize 指定大小,其默认为64M。
注意:如果设置的过小,而系统的.class文件过多(包含通过代理机制生成的动态类),就可能会产生元数据内存溢出。
PC寄存器
PC寄存器是每个线程私有的,它指向当前方法正在执行的指令,如果当前方法是本地方法,则值为undefined。
堆内存
堆内存就是实际存放对象的内存空间,也是GC回收的主要空间,是所有线程共享的内存空间。
堆内存可以通过参数JVM参数 -Xmx 指定。通过IDE,我们可以进行设置
public static void main(String[] args) <