一张图看懂Java虚拟机内存区域模型

Java虚拟机内存区域总结

Java虚拟机相当于一个抽象的计算机操作系统,其管理的内从区域大体上可以分为栈和堆,就像c或c++中对内存的分类一样,但这样的分类对于Java虚拟机来说太过粗浅,实际上Java虚拟机管理的内存区域分为程序计数器、虚拟机栈、本地方法栈、堆和方法区,根据各区域是属于线程私有还是由线程共享,这些区域可以分为两类,下面分别进行说明。

一、线程私有的内存区域

1.程序计数器(Program Counter Register)

程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。每个线程都有各自独立的程序计数器,如果线程正在执行的是一个Java方法,那么这个计数器记录的是正在执行的虚拟机字节码指令地址,如果正在执行的是Native方法,则程序计数器为空(Undifined)。
此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

2.虚拟机栈(VM Stack)

虚拟机栈也是线程私有的,它描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈和出栈的过程。
虚拟机栈帧中,局部变量表是比较为人所熟知的,也就是平常所说的“栈”,局部变量表所需的内存空间在编译期间分配完成,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。
虚拟机栈有两种异常情况:

  1. StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度,特别是方法的递归调用时
  2. OutOfMemoryError:虚拟机栈无法满足线程所申请的空间需求,即使经过动态扩展仍然无法满足,那么将导致OutOfMemoryError错误

3.本地方法栈(Native Method Stack)

本地方法栈与虚拟机栈相似,不过服务于本地方法,有些虚拟机将这两个区域合二为一。
本地方法栈中抛出异常的情况与虚拟机栈相同。

二、共享的内存区域

1.堆(Heap)

通常来说,堆是Java虚拟机管理的内存中最大的一块,被所有线程共享,在虚拟机启动时创建,堆的作用就是存储对象实例。
堆也是垃圾收集器所管理的主要区域,因此很多时候也被称作“GC堆”。从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,因此堆还可以被细分为:新生代和老年代。再继续细分可以分为:Eden空间、From Survivor空间、To Survivor空间等,从内存分配的角度来看,线程贡献的堆中还可以划分出多个线程私有的分配缓冲区u(Thread Local Allocation Buffer,TLAB)。
堆可以是物理上不连续的空间,只要逻辑上是连续的即可,-Xmx和-Xms参数可以控制堆的最大和最小大小。
堆的空间大小不满足时将抛出OutOfMemoryError异常。

2.方法区(Method Area)

用于存储已被虚拟机加载的类信息、常量、静态变量、JIT编译后的代码等数据。Java虚拟机规范将方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆)。

方法区同样会抛出OutOfMemoryError异常。

    在方法区中有一部分区域用来存储编译期产生的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
    这里需要说明一点,常量并不是只能在编译期产生,运行期间也会产生新的常量并被发在常量池中,如String类的intern()方法。
    

三、直接内存(Direct Memory)

本机直接内存并不是Java虚拟机运行时数据区的一部分,但它能在一些场景中显著提高性能,因为其避免了在Java堆和Native堆中来回复制数据。

直接内存同样会抛出OutOfMemoryError异常。

时间: 2024-10-23 23:32:25

一张图看懂Java虚拟机内存区域模型的相关文章

云栖长卷:一张图看懂云栖七年

7年前投下的一颗石子,7年后已经激荡成为一段壮阔的波浪. 2010年,与阿里云共同起步的,还有一场让中国互联网开始接触.了解云服务的大会--云栖大会. 云栖长卷一张图看懂云栖七年 ▼

六张图看懂 Amazon Go智能购物,专利文件解密AI 核心技术细节

亚马逊Go推广视频:1分钟,颠覆你对线下实体购物的认知 几天前,就在亚马逊迎来可能是公司史上最大的 Holiday Season时,亚马逊发布了一段介绍旗下新的零售商店 Amazon Go 的视频,消费者可以直接走进商店,拿下货架上的货物,然后离开.整个过程不需要排队,也不用结账. <福布斯>的记者 Ryan Mac 说:"这看起来非常有趣,充满了未来感,但是,至少目前为止,这一切还都只是宣传." 每年从感恩节到圣诞节的长假中,亚马逊都会成为媒体上的最大赢家.2013年,B

一张图看懂阿里云网络产品[一]网络产品概览

 一张图看懂网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第一篇 网络产品概览 系列文章持续更新中,敬请关注 [一]网络产品概览 [二]VPC [三]EIP [四]NAT网关 [五]负载均衡SLB [六]共享带宽 [七]共享流量包 [八]高速通道 [九]VPN网关 [十]全球加速 [十一]云托付 目前阿里云网络产品共有10个,包括专有网络VPC,负载均衡SLB,NAT网关,EIP,共享流量包,共享带宽,高速通道,VPN网关,全球加速.这么多产品有什么关联呢?为了便于大家理解,我们可以

一张图看懂2017双11中的网络产品和技术

一张图看懂2017双11中的网络产品和技术 揭秘2017双11背后的网络系列文章: 揭秘2017双11背后的网络-一张图看懂2017双11中的网络产品和技术 揭秘2017双11背后的网络-双11的网络产品和技术概览 揭秘2017双11背后的网络-直面双11洪峰的负载均衡SLB 揭秘2017双11背后的网络-全球最大混合云架构

一张图看懂CIA:攻击能力强是有原因的

本文讲的是一张图看懂CIA:攻击能力强是有原因的,2017年3月7日,维基解密曝光了CIA一系列敏感数据.这是继斯诺登泄露NSA数据之后又一大国家级机密信息泄露,维基解密将其称之为Vault 7,是CIA史上最大规模的机密文档泄露. Year Zero是一个系列性的数据,其中第一部分就收纳了来自弗吉尼亚州兰利市网络情报中心(CIA总部)的8761份文档和文件.这次CIA泄露的机密性数据包括恶意程序.病毒.木马.具有攻击性的0day exp.恶意程序远程控制系统及其相关文件. 据维基解密披露,CI

酷派Cool S1怎么样?一张图看懂酷派改变者S1优缺点

前天,酷派在上海召开新品发布会,推出了最新的旗舰手机酷派改变者S1.作为年底的压轴明星产品,酷派改变者S1可谓集万千风光于一身.该手机共有暗夜黑.恒河金.流光黑三种配色,标配版(4+64GB)售价2499元,高配版(6+64GB)2699元,流光黑顶配版(6+128GB)3199元.接下来我们就通过一张图来迅速地了解一下酷派改变者S1. 以上就是小编为大家带来的一张图看懂酷派改变者S1优缺点介绍的全部内容,感谢大家的阅读.

中国人工智能学会通讯——一张图看懂BP算法 1.3 神经网络的 BP 算法

1.3 神经网络的 BP 算法 它描述了网络输出和目标输出之间的距离,刻画了网络性能的好坏.显然,J越小,网络性能越好.寻求J的极小点是BP算法的目标. 这一关系式表明只要能计算出敏感性,即可据此计算出梯度. 删除中间过程,有 通过计算网络最后一层神经元的敏感性,然后在网络中反向逐层计算其他层神经元敏感性,这就是所谓BP. 图4非常容易记忆和理解,这就是我们所谓的一张图看懂BP算法.

8张图看懂什么是Java

正所谓一图胜千言,通过下面图解来理解一下Java.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做了什么 1 2 String s = "abcd"; s = s.concat("ef"); 2.equals()方法.hashCode()方法的区别 HashCode被设计用来提高性能.equals()方法与hashCode()方法的区别在于: 如果两个对象相等(equal),那么他们一定有相同的哈希值. 如果两个

一张图看懂美柚与大姨吗之争的内幕

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 俗话说,一山容不了二虎,一个妹纸也不需要两个大姨妈的APP,所以美柚和大姨吗之间的战争在所难免. 如果这个世界除了男人还有什么能够让女人又爱有恨的话,那么毫无疑问就是大姨妈.她来的时候,你很痛苦,她不来的时候,你以及你的他会更痛苦.而现在,她不光让你又爱又恨,还印发了互联网的一场战争. "从工具到社区,美柚背后的商业猜想"