jvm的自动内存管理机制之数据区域简介

一、运行时的数据区域

java虚拟机在执行java程序的时候会把管理的内存划分为多个区域进行数据管理,不同的区域的创建和销毁时间可能不同。java虚拟机会创建如下区域:
在这里插入图片描述

二、程序计数器

程序计数器是内存较小的一块区域,用来记录当前线程所执行到的代码行号,jvm中的解释器的作用就是通过改变计数器的值读取相应的指令。
在多线程的程序中,每个程序需要记录的执行位置不尽相同,所以就需要为每个线程分配一个计数器。因此,计数器就不能由所有程序共享。

三、虚拟机栈

虚拟机栈和程序计数器一样,是程序私有的,是随着线程的创建而创建。虚拟机栈是java方法的执行模型。每个方法对应一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等。
局部变量表存储着8种基本数据类型(byte、short、int、long、float、double、char、boolean)和对象的引用(不是实际的对象,而是指向堆区的对象信息的引用地址)和字节码指令地址。

四、本地方法栈

本地方法栈的用法和虚拟机栈非常相似,唯一的区别是本地方法栈为native方法服务。也有的虚拟机(sun hotpot)将虚拟机栈和本地方法栈合二为一。

五、java堆 (线程共享

java堆是jvm中占有内存最大的一块,为所有的线程所共享,堆内存主要用于存储所有的对象实例和数组。
java堆是垃圾回收器主要的工作区域,也被称为gc堆,从垃圾回收器的角度:可以分为青年代,老年代。这里的区分是为了更好地清理垃圾,回收内存,提高性能。

六、方法区 (线程共享

方法区是线程所共享的部分,用于存放类的信息,常量,静态变量,即时编译的代码等数据。
java虚拟机的设计团队把方法区以永久代的方式实现,这并不是一个好的注意,因为容易发生内存泄漏的问题,因此,在jdk1.7,已经把原来在永久代的字符串常量池移出了。

七、 运行时常量池

是方法区的一部分,在类被加载之后,一部分信息被存储到了运行时常量池中,如编译期的字面量和符号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值