发布于2026-07-07 阅读(0)
扫一扫,手机访问
Ja va代码跑起来,靠的就是JVM。JVM把自己管理的“地盘”划分成了好几个独立的内存区域,每个区域都有专门的用途。下面这张图就是Ja va虚拟机规范里的大致划分——当然,不同版本的虚拟机实现会有差异,但大体上都会遵守这套规则。

这里要留意一下:图上标的是逻辑层面上的分区,不是物理上的绝对划分。比如某些JDK版本里,方法区其实就实现在堆当中。
堆和方法区是线程共享的数据区域——这意味着多个线程可以同时访问堆或方法区中的同一个对象。Ja va线程之间的通信,本质上就是通过这种共享内存来完成的。
既然靠共享内存通信,那问题就跟着来了:原子性、可见性、顺序性,这三个“硬骨头”一个都不能少。为了解决这些,JVM专门搞了一套Ja va内存模型(JMM),它就像一整套协议,围绕着多线程通信以及相关的特性来定义规则。像volatile、synchronized这些关键字,就是JMM的具体体现。

Ja va是面向对象的语言,那么一个Ja va对象在JVM里到底长什么样?这就是Ja va对象模型要回答的问题——它描述了对象在JVM中的存储结构。
每个Ja va类被JVM加载时,JVM会为这个类创建一个instanceKlass,这个方法区的数据结构,代表了JVM层面的那个Ja va类。而当你在代码里用new创建一个对象时,JVM就会生成一个instanceOopDesc对象,这里面包含了对象头(用于存储锁、GC信息等)以及实际的实例数据。

上一篇:【Java】java的认识
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8