jvm内存的划分

jvm内存分为5个部分,有程序计数器,java虚拟机栈、本地方法栈、java堆和方法区。其中程序计数器、java虚拟机栈和本地方法栈是线程私有的。java堆和方法区是程序共享的。

程序计数器:(私有)

      a.可以看作是当前执行字节码的行号指示器。

      b.每个线程都有独立的程序计数器,各线程的程序计数器互不影响,独立存储。(为了程序切换后能回复到正确的位置)

      c.当执行java方法时,记录的是正在执行的jvm字节码的地址。若执行native 方法,计数器为空。

      d.jvm中唯一一个没有规定outofmemoryError的区域。

java虚拟机栈:(线程私有)

       a.线程私有,声明周期与线程相同

       b.每一个方法执行的同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法的执行和退出对应着栈帧在虚拟机栈中的入栈和出栈过程。

       c.局部变量表:存放编译器可知的各种基本数据类型、对象引用类型和returnAddress类(指向字节码指令的地址:函数返回地址)。局部变量表需要的内存空间在编译期是可以确定下来的。

本地方法栈:(线程私有)

       a.为native 方法提供服务

java堆

       a.jvm中所管理内存中最大的一块,在虚拟机启动时创建。

       b.存放对象实例,几乎所有的对象实例和数组都是这里分配内存。

       c.堆是垃圾收集管理的主要区域,也称为gc堆。

方法区(线程共享):

       a.用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码

       b.这个区域内存回收针对常量池的回收和对类的卸载。

       c.方法区也可以被垃圾收集

运行时常量池:它是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载器后进入方法区进入运行时常量池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值