1 JDK1.7结构
1.1 JVM内存图
程序计数器:
线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令....方法区:
线程共享的(所有的线程共享一份), .class的信息, 类的信息, 方法的定义, 常量池, 静态变量等.
1.2 JDK1.7 堆内存结构
Young 年轻区(代)
Young区被划分为三部分...JDK1.8 结构
2.1 JVM运行时内存图
JDK1.8和JDK1.7的jvm内存最大的区别是, 在1.8中方法区是由元空间(元数据区)来实现的,常量池移到堆中.
1.8不存在方法区,将方法区的实现给去掉了...元空间: 存储.class 信息, 类的信息,方法的定义,静态变量等.而常量池放到堆里存储
2.2 JDK1.8堆内存结构
由上图可以看出,jdk1.8的内存模型是由2部分组成, 年轻代+年老代....现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen。基于此,将永久区废弃,而改用元空间,改为了使用本地内存空间。