Java (JVM) 内存模型


Java 虚拟机 (JVM)

JVM 是一种抽象计算机,它使计算机能够运行 Java 程序。JVM 有三个概念: 规范 (指定 JVM 的工作方式。但实现已由 Sun 等公司提供)、 实现 (称为 (JRE) Java 运行时环境)和 实例 (编写 Java 命令后,运行Java 类,一个 JVM 实例被创建)。

Java 虚拟机加载代码、验证代码、执行代码、管理内存(这包括从操作系统 (OS) 分配内存、管理 Java 分配,包括堆压缩和垃圾对象的删除)并最终提供运行时环境。

Java (JVM) 内存结构

JVM 定义了在程序执行期间使用的各种运行时数据区域。有些区域是由 JVM 创建的,而有些是由程序中使用的线程创建的。但是,JVM 创建的内存区域只有在 JVM 退出时才会被销毁。线程的数据区在实例化时创建,在线程退出时销毁。

堆内存是运行时数据区域,所有 java 类实例和数组的内存都从该区域分配。堆是在 Java 虚拟机启动时创建的,并且在应用程序运行时可能会增加或减少大小。可以使用 –Xms VM 选项指定堆的大小。根据垃圾收集策略,堆可以是固定大小或可变大小。可以使用 –Xmx 选项设置最大堆大小。默认情况下,最大堆大小设置为 64 MB。



堆内存被分为年轻代和老年代,比例为1:2
年轻代又被分为伊甸区和两个幸存者区,比例默认为:8:1:1
常用的一些JVM内存参数设置

JVM Switch JVM Switch Description
-Xms 设置 JVM 启动时的初始堆大小
-Xmx 设置最大堆大小
-Xmn 设置年轻代的大小,其余空间用于老年代
-XX:PermGen 设置永久代内存的初始大小
-XX:MaxPermGen 设置 Perm Gen 的最大大小
-XX:SurvivorRatio 提供 Eden 空间的比例,例如,如果年轻代大小为 10m,VM 切换为 –XX:SurvivorRatio=2,则将为 Eden 空间保留 5m,为两个 Survivor 空间保留 2.5m。默认值为 8
-XX:NewRatio 年轻代和老年代的比例

堆是一个共享的运行时数据区,并将实际对象存储在内存中。它在虚拟机启动期间被实例化

方法区

  • 它是堆区域的逻辑部分,在虚拟机启动时创建。
  • 该内存分配给类结构、方法数据和构造函数字段数据,以及类中使用的接口或特殊方法。堆可以是固定大小或动态大小,具体取决于系统的配置。
  • 可以是固定大小或根据计算需要扩展。不需要是连续的。

虽然方法区在逻辑上是堆的一部分,但它可能会或可能不会被垃圾收集,即使垃圾收集在堆区是强制性的。

JVM 栈

  • 堆栈在创建线程的同时创建,用于存储方法返回值和执行动态链接时需要的数据和部分结果。
  • 堆栈可以是固定大小或动态大小。堆栈的大小可以在创建时独立选择。
  • 堆栈的内存不需要是连续的。

本地方法栈

本机方法堆栈不是用Java语言编写的。该内存是在创建时为每个线程分配的。它可以是固定的或动态的。

程序计数器(PC寄存器)

每个执行特定方法任务的 JVM 线程都有一个与之关联的程序计数器寄存器。非本地方法具有存储可用 JVM 指令地址的 PC,而在本地方法中,程序计数器的值是未定义的。PC 寄存器能够在某些特定平台上存储返回地址或本机指针。

#Java##Java虚拟机##程序员#
全部评论
看不懂😂
4 回复 分享
发布于 2022-10-16 10:59 甘肃
这个是jvm的内存结构吧,内存模型是另外的概念
4 回复 分享
发布于 2022-09-18 07:10 北京
不是改元空间了吗?
1 回复 分享
发布于 2022-10-22 12:49 广东
湖南-1这个不是内存模型
1 回复 分享
发布于 2022-10-08 08:28 广东
这应该是jvm内存分配,Java内存模型是JMM,不一样的
1 回复 分享
发布于 2022-09-23 10:52 安徽
牛啊
1 回复 分享
发布于 2022-09-01 19:58 福建
感觉是从哪里抄来的
点赞 回复 分享
发布于 2022-11-07 07:57 广东
我有一个前端交流群 有需要的私信
点赞 回复 分享
发布于 2022-10-13 18:47 天津

相关推荐

昨天 18:25
沈阳大学 Java
HR已读不回,是我说话方式不对吗?
大白之主:你是串子吗? hr: 我们不招人了,把岗位挂着boss只是因为我闲得慌
点赞 评论 收藏
分享
king122:专业技能不要写这么多,熟悉和熟练你经不住问,排版有些难看,中间的空隙搞小一点,项目描述的话感觉是从课程中抄下来的,改一改吧,不然烂大街了,每个项目都写一两点,用什么技术实现了什么难点,然后再写一些数字上去像时间又花了90%这样,这样面试会多一些,如果觉得自己的项目还是不够用的话,我有几个大厂最近做过的实习项目,感兴趣的话可以看我简介中的项目地址
点赞 评论 收藏
分享
评论
91
249
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务