JVM内存结构

JVM内存区域解析
本文详细介绍了Java虚拟机(JVM)管理的内存区域,包括程序计数器、虚拟机栈、本地方法栈、堆和方法区等部分。阐述了各区域的作用及特性,并解释了线程私有与共享内存的区别。

jvm管理的内存分为程序计数器、虚拟机栈、本地方法栈、堆、方法区
其中前三个个事线程私有的
程序计数器:
程序计数器是一块很小的区域,这部分区域的作用是存放当前线程所执行字节码的行号,它是线程私有的区域

虚拟机栈:
虚拟机栈也就是我们常说的栈空间,它也是线程私有的,每个方法执行的时候都会产生一个栈帧,它用来存储局部变量表、操作数栈、动态链接、方法出口等信息,每一个方法从调用到执行完成的过程,就对应着一个栈帧的入栈和出栈操作。 其中局部变量表中存放着基本数据类型、对象引用(不等同于对象,只是对象的地址或者句柄)和returnAddress类型

本地方法栈:
本地方法栈和虚拟机栈是一样的,只不过虚拟机栈执行的是java方法,而本地方法栈执行的是本地Native方法。

Java堆:
存放对象的实例,几乎所有的对象实例都存放在这,也是垃圾收集器管理的主要区域,时常被称为GC堆,由于现在收集器基本都采用分代收集算法,因此Java堆还可以分为新生代和老年代,新生代主要存在新生的对象,老年代主要用来存放生命周期较长的对象,新生代通常都是朝生夕死,生命周期很短,再细致一点,新生代还分为Eden空间,From Survivor空间、To Survivor空间等 这三个空间主要用于垃圾收集算法的复制算法。

方法区:
用于存储被虚拟机加载的类信息,常量、静态变量、即时编译器编译后的代码等数据,也叫Non-Heap(非堆) 也有一些人把 方法区称作永久代,这一区域jvm对它的限制是很宽松的,还可以选择不进行垃圾收集。

运行时常量池
这部分是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种字面量和符号引用,这部分内容在类加载后进入方法区的运行时常量池中存放。

直接内存:
并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存,在jdk 1.4中新加入了NIO(New Input/OutPut)类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存。

Z708037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值