导图
jvm内存模型
方法区:用来存储元数据信息的内存区域(元数据信息是jvm执行类加载过程中,类装载后的结果信息),构建类的实例和调用对象的方法时都会访问元数据。
元数据:
类型信息:类的权限定名,超类的权限定名,类型是类还是接口,类型的访问修饰符
字段信息:字段名,字段类型,字段修饰符。
方法信息:方法名,方法返回类型,方法参数的数量和类型。
其他信息:1.常量和静态变量。
2.常量池:JVM会为每个已加载的类型维护一个常量池。是一个已加载类型的有序集合 。通过索引访问。
方法区的特性:1.是线程安全的,是线程共享。2.方法区大小不必固定,是jvm根据需要动态调整的。3.可以被垃圾器收集。
虚拟机栈:为字节码服务,线程私有的内存区域,生命周期和线程一致。描述java方法执行时的内存模型。
1.一个java方法从执行到结束,就对应着栈帧从入栈到出栈的过程。
2. 对执行引擎来说,只有栈顶栈帧是有效的。
3.内存区域划分:
局部变量表:是一组变量值存储空间,用于存放方法参数和方法。内部定义的局部变量。通过索引的方式来访问。
操作数栈 :一个以字长为单位的数组。
动态连接:运行期间符号引用转换成直接引用。
返回地址:分为正常返回(pc计数器的值作为返回地址)和异常结束返回(地址通过异常处理器表来确定)。
本地方法栈:为虚拟机需要用到的native方法服务。
堆:是java虚拟机管理的内存中最大的一块。被线程共享的,存放对象实例。堆是垃圾收集器主要管理的内存区域。
jvm垃圾回收:有效的防止内存泄漏,有效的使用空闲的内存空间。
HotSpot VM:是Sun JDK和OpenJDK中所带的虚拟机,使用最广泛的java虚拟机。