JVM的内存结构,简单说一下为什么要知道JMM(开篇)
发布日期:2021-06-29 13:15:45 浏览次数:2 分类:技术文章

本文共 1086 字,大约阅读时间需要 3 分钟。

JVM的内存结构,简单说一下JMM

 

我们为什么要学习jmm呢?这其实是一种追本溯源的过程,对于开发人员来说,需要很清晰的控制每个对象的出生到毁灭,并且需要控制每一个对象的归属,而不是随波逐流。这尤其是C的开发人员。但是对于Java程序员来说,在虚拟机自动内存管理机制的帮助下。我们放宽了很多心,我们类似将整个项目的对象的构造,回收都托管给了第三方,也就是Java虚拟机内存管理模型。

如此一来,我们就不需要花重心去打理内存的使用,但是Jvm虚拟机内存模型并不是永远不会发生错误,也会有内存溢出的情况,那么在这个时候我们就手足无措了,因为我们对其不关心,认为他是一个助手,当助手出了问题,不会轮到我这个被辅助的人去帮助他。

就好比,我只是一个炒菜的厨师,如果有一天,煤气罐没气了,我就一点原因都不清楚?只会傻等着换煤气的师父来帮我检查问题吗?各司其职没问题,但是作为一个高级厨师,我们应当有这种觉悟,我们不屑于只做表面的功夫,我们会炒菜,也应该了解火候,而不是只会颠勺。

那么回到正题,如果jvm层面出了问题,那作为一名合格的Java开发人员,我们应当需要知道他的来龙去脉,以及问题产生,及方案解决。

 

 

 

Java内存模型都应该有所了解,那就贴张重绘图片吧

对于启动各个区域,都会有不同的用途,并且每个区域中的对象数据都有着不同的生命周期。

 

基本上司空见惯的图片,从上述图片内存结构分层来说,我们可以分为三个层:加载、运行数据、执行。当然还有比较细的划分。本质上来说,jmm其实并不存在,只是jvm将其内存抽象为类似的结构模型,对于我们程序员来说,更利于理解,知道他到底做了什么。

 

那么我们对这张图片进行细粒度的再精细一下,例如:其中的类加载子系统中到底有哪些组成?其中的执行引擎有分为哪几部分呢?还有更关心的,我们的运行数据区中的划分,堆中又分为哪些部分?

按照网络上的图片结果,我再重绘一下一张图片:

 

图片呢,都是网络上大佬分析出来的,然后小弟我也进行了一个重绘,便于理解

当然,在深入理解JVM虚拟机这本书中也有相应的图片,我此处也粘一下

 

此书也是将运行时数据区划分为类似的5块区域,并且告诉了我们:

所有线程共享的区域有:“方法区”,通常存放常量,类元数据等数据;还有“堆”空间,就是对象的存储空间。

然后,线程间相互隔离的数据区域是:“虚拟机栈”:栈空间内存;“本地方法栈”:本地方法空间内存;“程序计数器”:方法的后置方法,返回信息等配置。

 

这篇文章就到这,只是简单分享一下我们为何需要了解JMM,他有哪些内容,然后和大家分享几张图片,后面我们分别对其进行分析分享。

 

 

 

 

转载地址:https://changemax.blog.csdn.net/article/details/113799723 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:什么叫做“程序计数器”?它能做什么?
下一篇:LockSupper是什么?他和Lock、Synchroized有什么关系?解决了什么?

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月10日 11时58分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章