JVM内存模型的划分浅谈

jvm内存模型共分为虚拟机栈、本地方法栈、堆、方法区和程序计数栈五个部分。
在这里插入图片描述
1.程序计数器(线程私有):每个线程都有一个独立的程序计数器,计数器所记录的是虚拟机字节码指令当前的地址。

2.虚拟机栈(线程私有):每个线程对应一个虚拟机栈,栈中的每一个栈帧对应一个方法。它的生命周期与线程相同。每个方法被执行时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接和方法返回地址等信息。每个方法被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
2.1局部变量表:存放了编译器可知的各种基本数据类型(int,long,short,double,float,char,byte,boolean)、对象引用(reference类型)和returnAddress类型(指向一条字节码指令的地址)。同时在编译器就确定了局部变量表的最大容量。
2.2操作数栈:虚拟机把操作数栈作为它的工作区——大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。
2.3动态链接:每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连 接。
2.4方法返回地址:当方法被执行后,退出方法有两种:遇到返回字节码指令或者产生异常,并且异常没有在该方法体内得到处理。但无论哪种退出方式都需要返回被调用位置,正常退出时,一般使用栈帧中保存的地址,异常退出时则由异常处理表来确定返回地址。

3.本地方法栈(线程私有):和虚拟机栈类似,但主要为虚拟机使用到的Native方法服务。

4.Java堆(线程共享):所有线程共享,在虚拟机创建时启动,用于存放对象的实例。
堆是JVM内存占用最大,管理最复杂的一个区域。唯一的途径就是存放对象实例:所有的对象实例以及数组都在堆上进行分配。

5.方法区(线程共享):所有方法线程共享的一块内存区域,用于存储已经被虚拟机加载的类信息,常量,静态变量等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM(Java虚拟机)模型是指Java程序在运行时的执行环境,包括JVM的组成部分和它们的工作原理。JVM内存模型是指Java虚拟机管理程序运行时内存的方式,包括内存划分、内存分配和对象回收等机制。 JVM模型的组成部分包括类加载器、解释器、即时编译器、垃圾收集器等。类加载器负责将Java类加载到JVM中,并将其转换为可执行代码;解释器负责解释字节码并执行相应的指令;即时编译器则将频繁执行的代码编译成本地机器码,以提高程序的执行效率;垃圾收集器则负责回收程序运行时不再使用的内存。 JVM内存模型规定了Java程序运行时内存的分配和管理方式。JVM内存模型将内存划分为不同的区域,包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。其中,堆是Java程序运行时内存中最大的区域,用于存储对象实例。虚拟机栈和本地方法栈则用于存储程序执行时的局部变量和方法调用信息。方法区用于存储已加载的类信息、常量池、静态变量等数据。程序计数器则用于记录当前线程所执行的字节码指令位置。 JVM内存模型还包括垃圾回收机制,用于自动回收程序运行时不再使用的内存。垃圾回收机制采用标记-清除、复制、标记-整理等不同的算法来回收内存。 总之,JVM模型和JVM内存模型是Java程序运行时的重要组成部分,了解和掌握它们的工作原理对于编写高效、稳定的Java程序至关重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值