概述
要了解JVM内存模型之前需要先知道什么是JVM
什么是JVM
首先要先搞明白JVM和JDK和JRE的关系。
三者的包含关系为:JDK包含JRE包含JVM
JDK:Java 开发工具,JDK包含JRE,Java基础类库和Java工具,这是给开发者使用的产品。
JRE:Java运行时环境,在运行java程序代码时,提供Java运行的所有环境集合,包括核心类库,JVM实现等,在安装jdk时,安装目录下会有一个jre的目录,jre目录下有一个lib目录和一个bin目录,lib目录中存放的是Java运行是所需要的核心类库,bin中的就是JVM的实现。
JVM:包含在Jre中的bin目录下,他里面为我们封装了一些命令,比如:javac,是Java语言运行的虚拟机,提供了编译器,执行器等等。市面上最常用的JVM是HotSpot。
Java号称一款跨平台的语言,一次编译到处运行,原因就是JVM在软件层面帮我们封装了不同操作系统的指令,可以让Java开发者无需关注底层操作系统实现。换句话说,你只需要按照Java的语法开发你的程序就行了,至于怎么在操作系统上运行起来,怎么与操作系统交互等等交给JVM去做就行了。
当下载jdk时,如果你是windows系统就要下载windows版本的jdk,如果你是linux系统,你就要下载linux版本的jdk,不同的操作系统有不同的jdk实现。
知道了JVM是什么就可以来学习什么是JVM内存模型了
什么是JVM内存模型
首先要分清楚两个概念,JVM内存模型和Java内存模型是两个不同的东西
什么是Java内存模型
Java内存模型(JMM):大家都知道Java中真正做事的是什么?线程,Java也是支持多线程的。那如果在多线程环境中,对共享变量访问,多个线程是如何操作的?随意访问 随意操作?这岂不是很混乱,程序还怎么执行?Java内存模型就是用来规范这玩意的,让大家(多线程)按照我的规范来操作。
JMM规范了多线程环境中,对共享变量访问的方式。通过这个规范解决多线程的可见性,原子性,访问共享变量的冲突问题。
怎么规范的呢?
有一块区域,叫做主存,把共享变量放到主存中,这块区域大家共享。线程A需要访问共享变量,好,给线程A开辟一块独立的空间,把共享变量拷贝一份到这个独立空间中(这块空间叫做工作空间),随你操作。此时线程B也需要访问共享变量,好,也给线程B开辟一块独立的空间,把共享变量也拷贝一份到这个独立空间中,随你操作。
什么是JVM内存模型
JVM内存模型主要是指运行时数据区。JVM主要包含三块:运行时数据区,类装载子系统,字节码执行引擎。
JVM的内存结构,往往指的就是JVM定义的「运行时数据区域」。
简单来说就分为了5大块:方法区、堆、程序计数器、虚拟机栈、本地方法栈。
以下是对各个模块的解释:
程序计数器:Java是多线程的语言,我们知道假设线程数大于CPU数,就很有可能有「线程切换」现象,切换意味着「中断」和「恢复」,那自然就需要有一块区域来保存「当前线程的执行信息」所以,程序计数器就是用于记录各个线程执行的字节码的地址(分支、循环、跳转、异常、线程恢复等都依赖于计数器)
**虚拟机栈:**用于管理 Java 函数的调用
每个线程在创建的时候都会创建一个虚拟机栈,每次方法调用都会创建一个栈帧。每个栈帧会包含几块内容:局部变量表、操作数栈、动态连接和返回地址,它的作用是保存局部变量、部分变量的计算并参与了方法的调用和返回。
本地方法栈:本地方法栈跟虚拟机栈的功能类似,虚拟机栈用于管理 Java 函数的调用,而本地方法栈则用于管理本地方法的调用。这里的本地方法指的是非Java方法,一般本地方法是使用C语言实现的。
方法区: 方法区主要是用来存放已被虚拟机加载的类相关信息:包括类信息、常量池。
类信息又包括了类的版本、字段、方法、接口和父类等信息。
常量池又可以分静态常量池和运行时常量池。静态常量池主要存储的是字面量以及符号引用等信息,静态常量池也包括了我们说的字符串常量池。运行时常量池存储的是类加载时生成的直接引用等信息。从逻辑分区的角度而言常量池是属于方法区的,但自从在JDK7以后,就已经把运行时常量池和静态常量池转移到了堆内存中进行存储(对于物理分区来说运行时常量池和静态常量池就属于堆)
堆: 堆是线程共享的区域,几乎类的实例和数组分配的内存都来自于它,堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivor 和 To Survivor 组成
将堆内存分开了几块区域,主要跟垃圾回收机制有关。
最后
以上就是满意蜜粉为你收集整理的JVM内存模型什么是JVM什么是JVM内存模型的全部内容,希望文章能够帮你解决JVM内存模型什么是JVM什么是JVM内存模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复