JVM内存结构
文章目录
借鉴文章: (61条消息) JVM原理最全、清晰、通俗讲解,五天40小时吐血整理_小爷欣欣-CSDN博客_jvm详解
一、JVM内存结构图
首先直观的通过下图来认识一下JVM的运行时内存结构:
JVM使用的内存有可能是在操作系统的堆内存中(博客中谈及,个人未探究)。
二、关于JVM的内存结构
1、虚拟机栈
简单的来说,就是一个栈结构,用来存储指令,运行指令,操作局部变量,记录方法引用和返回地址等。虚拟机栈线程私有,在线程调用start()方法时,会开辟一个栈与之对应。
虚拟机栈的栈帧还细分为以下结构:局部变量表,操作数栈,动态链接,方法返回地址和附加信息。
局部变量表:存储方法中声明以及传入的作用域仅在方法内的变量。
操作数栈:用于执行相应指令的栈。
动态链接:具体调用的方法的变量。
方法返回地址:记录栈帧出栈之后接下来要执行的指令位置。
异常:StackOverflowError,OutOfMemaryError
指令执行时,虚拟机栈的变化如下:
2、本地方法栈
与虚拟机栈类似,用于执行本地方法。
3、方法区
(1)在虚拟机启动的时候创建。
(2)所有jvm线程共享。
(3)除了和堆一样不需要不连续的内存空间和可以固定大小或者可扩展外,还可以选择不实现垃圾收集。
(4)用于存放已被虚拟机加载的类信息、常量、静态变量、以及编译后的方法实现的二进制形式的机器指令集等数据。
(5)被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。
(6)运行时常量池(Runtime Constant Poo