如何从编程的本质理解JVM内存模型

栏目: Java · 发布时间: 7年前

内容简介:一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆、栈之类的概念。这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记硬背。任何程序,无论实现语言,它的数据总是可分为两类:元数据和业务数据。《深入理解Java虚拟机》

一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆、栈之类的概念。这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记硬背。

编程的本质

编程的本质是什么,有这么一句话, 程序=算法+数据结构。

这里的"算法"其实相当宽泛,而平时理解的算法是指诸如 排序 、查找等操作,相对狭隘。所以换一个解释,我们把算法解释为对数据执行操作,简称执行。

这样,程序的本质便是 数据+执行

而JVM作为 JAVA 程序的执行载体,必然从逻辑上与其相对应。

JVM内存模型

因此,JVM内存模型可以分为这么两部分:数据区、执行区。

如何从编程的本质理解JVM内存模型

数据区

任何程序,无论实现语言,它的数据总是可分为两类:元数据和业务数据。

  1. 元数据,指描述语言本身的数据,如类信息、指针、引用、即时编译代码等等。
  2. 业务数据,是指功能需求的数据,比如人事系统中的人员、部门数据,在面向对象的语言中以对象的形式存在。

而在JVM内存模型中,元数据对应方法区(Method Area),而业务数据对应着Java堆(Java Heap)。

书中解释如下:

Java堆:存放对象实例和数组。

方法区:存储加载的类信息、常量、静态变量、即时编译代码等

因此,图示如下。

如何从编程的本质理解JVM内存模型

执行区

执行部分,首先我们得理解程序执行的基本单位是什么,是 方法(或称函数)

通常的程序入口是main方法,单元测试也是基于方法。

平时交流时,也会说调下这个对象的方法,而不是调下这个对象。

甚至还有专门的函数式编程。

而在Java中,方法分为两种:Java方法和Native方法

在内存模型中,Java方法对应Java虚拟机栈(Java Virtual Machine Stacks),Native方法对应本地方法栈(Native Method Stack)

书中解释如下:
  1. Java虚拟机栈是方法执行的内存模型。
  2. 本地方法栈为虚拟机使用Native方法服务。

除此之外,再加上程序计数器(Program Counter Register),为当前线程所执行的字节码的提供行号指示。

主要的内存模型就画出来了。

如何从编程的本质理解JVM内存模型 其中,数据区是通用的,所以线程共有,而执行区是线程执行自己的,所以线程私有。

JVM内存模型

再加上真正去执行程序的执行引擎,链接本地方法库,JVM内存模型就很好理解了。

如何从编程的本质理解JVM内存模型

对比下书上的结构,逻辑上一致。

如何从编程的本质理解JVM内存模型 以上。

参考资料

《深入理解Java虚拟机》

作者


以上所述就是小编给大家介绍的《如何从编程的本质理解JVM内存模型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长黑客

增长黑客

Sean Ellis / 张溪梦 / 中信出版集团股份有限公司 / 2017-11-1 / CNY 59.00

脸谱网如何从默默无闻到坐拥二十几亿用户? 爱彼迎、优步何以在短短时间估值超过百亿美元? 领英怎样跨步成为全球领先的职业社交平台? 这些初创公司实现爆发式成长的共同奥秘就是增长黑客。 增长黑客是硅谷当下热门的新商业方法论,其精髓在于通过快节奏测试和迭代,以极低甚至零成本获取并留存用户。 作为最早提出“增长黑客”概念的理论先驱、带领Dropbox实现500%增长的实战领军......一起来看看 《增长黑客》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具