首页 > 编程知识 正文

jvm对象内存模型,jvm内存分配

时间:2023-05-03 16:57:34 阅读:14731 作者:2353

分享独特的太阳镜人工智能教程。 我的零度基点! 容易理解! 幽默感! 希望你也加入人工智能的团队! 请单击http://www.captainbed.net

javavirtualmachinespecification定义了Java内存模型(JMM ),以阻止不同硬件和操作系统的内存访问差异,并在不同平台上提供一致的内存访问到目前为止,主要的程序语言(如I/O )直接使用物理硬件和操作系统的内存模型,因此由于每个平台的内存模型的差异,一个平台上的程序可以完全正常地同时运行,而另一个平台则可以正常运行

定义Java内存模型并不是一件容易的事。 必须对该模型进行足够严格的定义,以防止Java并发内存访问操作产生歧义。 但是,虚拟机的实现必须定义得足够宽松,以便有足够的可用空间来利用硬件的各种特性(寄存器、缓存和指令集特定的指令)提高执行速度。

主内存和工作内存Java内存模型的主要目标是定义对程序中每个变量的访问规则。 这意味着定义了基本详细信息,例如在虚拟机中将变量存储在内存中或从内存中检索变量。 这里的变量(Variables )与Java编程中所说的变量不同,它包含构成实例字段、静态字段和数组对象的元素,但不包含局部变量和方法参数。 后者是线程专用的,不共享,所以当然没有冲突问题。 为了提高性能,Java内存模型不限制执行引擎使用处理器的特定寄存器或缓存与主内存进行交互,也不限制实时编译器优化代码的执行顺序。

Java内存模型规定所有变量都存储在主内存中。 这里的主内存与介绍物理硬件时的主内存名称相同,两者都可以相互类比,但这里是虚拟机内存的一部分。 每个线程也有自己的“工作内存”(Working Memory ),线程的工作内存存储该线程使用的变量的主内存副本。 线程对变量的所有操作(读取、赋值等)都在工作存储器中进行,不能直接读写主存储器中的变量。 不同线程之间也不能直接访问对方工作存储器内的变量,线程间变量值的交换都需要在主存储器中进行。

在较低的级别,主内存直接对应于物理硬件的内存,但为了实现更快的运行速度,虚拟机甚至硬件系统本身的优化措施使得在运行程序时主要访问读写的是工作内存

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。