JVM 内存模型

目录

1.JVM 内存模型是什么?

​  1.1 什么是内存模型?

2. JVM 概述

3.JVM 体系结构

4.内存管理

5.碎片回收

6. 图解JVM

6.1 说明:😁😁😁😁😁

7. 将JVM抽象表示:

7.1 说明: 


1.JVM 内存模型是什么?

JVM是【Java Virtual Machine(Java虚拟机)】的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

  1.1 什么是内存模型?

  • 内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系.
  • 以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节
  • 对象最终是存储在内存里面的
  • 但是编译器、运行库、处理器或者系统缓存可以有特权在变量指定内存位置存储或者取出变量的值。

💻💻💻💻💻💻

2. JVM 概述

  • Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统
  • Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令
  • Java语言的可移植性正是建立在Java虚拟机的基础上
  • 任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行
  • 这就是“一次编译,多次运行
  • Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。
  • Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库

所以JVM实际上就相当于一个软件,只要被编译,一旦有JVM就可以在不同平台运行(可移植性);

3.JVM 体系结构

  • 每个Java程序都离不开Java虚拟机,Java程序的运行依靠具体的Java虚拟机实例。在Java虚拟机规范中,分别用子系统、内存区、数据类型以及指令这几个术语来描述的。这些组成部分一起展示出一个抽象化的虚拟机内部的抽象体系结构。
  • Java虚拟机主要分为五大模块:
    • 类装载器子系统
    • 运行时数据区
    • 执行引擎
    • 本地方法接口
    • 垃圾收集模块(GC守护线程)
  • Java虚拟机不是真实的物理机,它没有寄存器,所以指令集是使用Java栈来存储中间数据,这样做的目的就是为了保持Java虚拟机的指令集尽量的紧凑,同时也便于JAVA虚拟机在那些只有很少通用寄存器的平台上实现。
  • 另外,JAVA虚拟机的这种基于栈的体系结构,有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。 (地址较近)

4.内存管理

  • (1)对于Java运行时涉及到的存储区域主要包括程序计数器、Java虚拟机栈、本地方法栈、java堆、方法区以及直接内存等等。对于每个部分,都有其使用的条件。
    • 程序计数器主要是取下一条指令,在Java里面主要是取下一条指令的字节码文件;
    • Java虚拟机栈主要是利用栈先进后出的特性存储局部变量表,动态链接等,主要包括堆内存和栈内存,对于程序员内存分析而言是特别重要的。
    • 本地方法栈与上边的栈基本作用差不多,只不过这里是为Java方法而服务Java堆是内存管理中最大的一块(对象存储的一块),所有的线程共享这一块内容,同时该部分也是垃圾收集器的主要区域。
  • (2)虚拟机的垃圾回收机制是完善的,动态内存分配和回收是比较成熟的,在内存管理机制中,大部分都不需要我们考虑内存回收,只有Java堆和方法区需要我们考虑处理内存问题。一般的对于内存回收首先就是判断某一个部分是生存还是死亡,主要是通过下面二种算法
    • 其一是引用计数算法,本算法实现简单,判定的效率也是比较高的,很多的软件都使用了该算法,但是主流的Java并没有选择该算法,核心的问题是该算法难以处理对象之间相互调用的问题。
    • 其二是称可达性分析算法,该算法核心思想是依靠判断对象是否存活来实现的,本算法是通过一系列的GC ROOTS的对象作为起始点,采用搜索的算法遍历引用链,如果搜索过程中没有发现该节点,则认为该节点是不可达的,即可回收的,在Java里面,一般可以使用该算法处理问题。

5.碎片回收

  • Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。
  • 解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。
  • 一旦对象使用完毕,便将其回收到堆中。
  • 在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。
  • 对内存进行释放和回收的工作是由Java运行系统承担的。
  • 这允许Java运行系统的设计者自己决定碎片回收的方法。
  • 在SUN公司开发的Java解释器和Hot Java环境中,碎片回收用后台线程的方式来执行。
  • 这不但为运行系统提供了良好的性能,而且使程序设计人员摆脱了自己控制内存使用的风险。

6. 图解JVM

6.1 说明:😁😁😁😁😁

7. 将JVM抽象表示:

7.1 说明: 

 

今天就到这里~~~

 感谢观看,欢迎留言~~~

 

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你困了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值