JVM_1.1_运行时内存区域_堆

运行时内存区域这块,如果不将内存各个区域做什么的了解清楚,后面看的会很累。

之前将JVM运行时内存区域的内容,整理在了一篇文章中。

在后续深入、细致的学习中,整理的内容越来越多,一篇的话,会导致篇幅过长。

所以将《JVM运行时内存区域详解》分为以下几个章节:

JVM_1.0_运行时内存区域

JVM_1.1_运行时内存区域_堆

JVM_1.2_运行时内存区域_Java虚拟机栈

JVM_1.3_运行时内存区域_方法区

JVM_1.4_运行时内存区域_本地方法栈

JVM_1.5_运行时内存区域_程序计数器

JVM_1.6_运行时内存区域_运行时常量池

JVM_1.7_运行时内存区域_栈帧

 

这里将《Java虚拟机规范中文版》上传了,点击下面链接,即可下载

Java虚拟机规范SE7中文版下载

 

目录

《深入理解Java虚拟机:JVM高级特性与最佳实践》

《Java Virtual Machine Specification Java SE 7 中文版》

《Java Virtual Machine's Internal Architecture》

扩展


 

《深入理解Java虚拟机:JVM高级特性与最佳实践》

Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是线程共享的,在虚拟机启动时创建

此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

但随着技术发展,所有对象都在堆上分配也渐渐变得不那么"绝对"了;

Java堆是垃圾搜集器管理的主要区域,因此很多时候也被称作"GC堆"。

从内存回收的角度来看,由于目前垃圾收集器都采用分代收集算法,所以 堆 还可以细分为:新生代 和 老年代

不过无论如何划分,都与存放内容无关,无论是哪个区域,存储的都是对象实例。

进一步划分的目的是为了更好地回收内存,或者更快的分配内存。

 

《Java Virtual Machine Specification Java SE 7 中文版》

在Java虚拟机中,堆(Heap)是可供各条线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。

Java堆在虚拟机启动的时候就被创建,它存储了被自动内存管理系统(垃圾搜集器)所管理的各种对象。

(本规范中所描述的 Java 虚拟机并未假设采用什么具体的技术去实现自动内存管理系统。虚拟机实现者可以根据系统的实际需要来选择自动内存管理技术。)

Java堆的容量是固定大小的,也可以随着程序执行的需求动态扩展,并在不需要过多空间时自动收缩。

Java堆所使用的内存不需要保证是连续的。

注: 如果实际所需的堆超过了自动内存管理系统能提供的最大容量,那 Java 虚拟机将会抛出一个OutOfMemoryError 异常

 

《Java Virtual Machine's Internal Architecture》

https://www.artima.com/insidejvm/ed2/jvm6.html

在JVM运行时数据区中,堆扮演的是存储公共数据的角色,就好像是电脑中的硬盘。

只有正在运行的Java应用程序中创建类实例或数组,才会在堆中分配内存以存放对象。

 

扩展

这篇文章中解释的很好,堆就是一个存储单位。(推荐大家可以看下)

http://hllvm.group.iteye.com/group/wiki/2858-JVM

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值