虚拟机内存结构简述

本文深入探讨Java虚拟机(JVM)的内存模型,包括线程共享与隔离区域,如方法区、堆、本地方法栈及Java虚拟机栈的作用与管理方式。详细解释了HotSpot虚拟机中永久代的概念及其回收机制,以及程序计数器如何指引程序执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个虚拟机有好多个版本,其中最常用的是HotSpot,不晓得神情况下载就是这个版本。大致的内存模型入下图。
内存模型图
线程共享即为每个线程都用的同一个区域的内存,所有线程都可以自由访问。线程隔离即为线程独有的,线程之间不能共同访问。

  • 方法区
    这个区域的内存线程共享的,用于保存类的信息,常量,是堆的一个逻辑部分,所以垃圾回收也会回收到。静待变量等数据,1.7之前还存有字符串常量HotSpot1.7后转移到了堆,所以String.intern()查询虚拟机里是否有该字符串存在,方法不同的虚拟机可能表现不一样。在HotSpot中通常称为永久代,因为这部分内存也加入回收机制只是条件比较苛刻,


  • 第一次看到的时候还以为和数据结构和算法里面的堆有点联系的,然而堆内存管理方式不是堆数据结构,通常是链表的形式。这个堆就是表现为一堆内存这样子而已。跟数据结构里堆毛关系没有。这块内存存放对象实列的,线程共享。通常所说的对象引用就是指向这个区域的。

  • 本地方法栈和Java虚拟机栈
    这两个差不多一样,在有的虚拟机直接就是合二为一,这个区域线程私有的,每个方法在执行的同时都会创建一个栈帧(关于栈帧后面介绍),这个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。本地方法为Java方法服务,Java虚拟机方法为native方法服务(可能是其他语言的方法)

  • 程序计数器
    线程私有的,保存程序运行的位置(指令地址),指哪执行哪,先改变计数器的值再执行所指的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值