JDK1.8 JVM 运行时内存:
程序计数器:
线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令. 而
每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了.记录代码执行的位
置。
Java 虚拟机栈:
线程私有的(每个线程都有一个自己的 Java 虚拟机栈). 一个方法运行, 就会给这个方法创
建一个栈帧, 栈帧入栈执行代码, 执行完毕之后出栈(弹栈)存引用变量,基本数据类型。
本地方法栈:
线程私有的(每个线程都有一个自己的本地方法栈), 和 Java 虚拟机栈类似, Java 虚拟机栈
加载的是普通方法,本地方法加载的是 native 修饰的方法。
native:在 java 中有用 native 修饰的,表示这个方法不是 java 原生的。
堆:
线程共享的(所有的线程共享一份). 存放对象的,new 的对象都存储在这个区域.还有就是
常量池。
元空间: 存储.class 信息, 类的信息,方法的定义,静态变量等.而常量池放到堆里存储
JDK1.8 和 JDK1.7 的 jvm 内存最大的区别是, 在 1.8 中方法区是由元空间(元数据区)来实
现的, 常量池。
1.8 不存在方法区,将方法区的实现给去掉了.而是在本地内存中,新加入元数据区(元空间)。