JVM内存模型

锦通  金牌会员 | 2023-12-10 13:36:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

JVM内存模型

JVM-就是Java虚拟机
主要由ClassLoader(类加载器),Runtime Data Area(运行时数据区,内存分区),Execution Engine(执行引擎),Native Interface(本地库接口)组成
JVM屏蔽了平台,使Java只需要生成在JVM上运行的字节码文件,就可以实现多平台。
JVM的执行过程

Java文件通过javac编译为class文件,然后JVM通过ClassLoader加载到Runtime Data Area,由Execution engine翻译为操作系统指令集交给CPU执行,此时会调用到Native Interface。

在内存中,堆和方法区是所有线程共有的,而虚拟机栈、本地方法栈和程序计数器是线程私有的


虚拟机所管理的最大的一块内存,所有线程共享,在虚拟机启动时创建,唯一的目的就是存放对象实例
堆内存通常被划分为新生代和老年代,新生代中通常也会进行一定的划分,这主要关系到JVM的垃圾回收机制(分代收集理论)。我们通常认为大多数对象的存活时间都很短,而一个被经常使用的实例对象越不容易死去,因此垃圾收集器根据年龄(对象经过垃圾收集过程的次数)来将Java堆划出不同的区域存储。
方法区

与堆一样是所有线程共享的区域,存储已经被虚拟机加载的类型信息,常量、静态变量、代码缓存等。也可以叫metaSpace(元空间)
类名、父类名、修饰符、直接接口的有效列表
成员变量的相关信息
方法的相关信息
JVM 栈

线程私有的,生命周期与线程相同,描述方法运行时的线程内存模型,存储局部变量表、操作数栈、动态连接、方法出口等,方法的执行就对应栈帧的入栈和出栈。
本地方法栈

与JVM栈类似,只不过JVM栈为字节码服务,而本地方法栈为本地库的方法服务。
程序计数器

JVM的字节码解释器在工作时,就是要通过改变程序计数器的值来选取下一条要执行的命令,像分支、循环、跳转、异常处理、线程恢复都依赖计数器完成
程序计数器的作用就是存放指令地址, 确定了指令的执行顺序!
需要注意的是,除程序计数器外,其他区域都规定了在内存不足时会抛出OutOfMemoryError异常。
如有疏错,恳请指证。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表