先从这张图来看JVM的内存模型,而后我再分别介绍各内存区的做用:java
类装载子系统根据类的全限定名获取定义类的二进制字节流;将这个字节流所表明的静态存储结构转化为方法区中的运行时数据结构;而后在堆中建立一个表明这个类的java.lang.Class对象,做为方法区中静态数据的访问入口。数据结构
方法区被全部线程共享,方法区存放的信息有:线程
a. 类的类型信息,这类型信息由类加载器从类文件中提取,包括:对象
b. 类的static变量、final变量(全部对象共享一分拷贝)接口
c. 类的属性信息,也称域信息,包括:内存
d. 类的方法信息,包括:it
e. 常量池,用于存放类、方法的各类符号引用。变量
f. 加载一个类的类加载器的引用引用
g. Class类的引用二进制
堆区存放运行时的全部对象、实例,它也是GC管理的主要区域。
每启动一个新的线程,就会被分配一个栈;每一次的方法调用,就是一次从入栈到出栈的过程。
与Java栈相似,只是它用于本地方法调用。
程序计数器,老是指向该线程下一步要执行的指令,指令的位置放在方法区的方法字节码中。程序计数器的值或内容是相对第一个指令的偏移量。