外贸网站建设厦门杭州e时代网站建设

张小明 2025/12/29 1:43:41
外贸网站建设厦门,杭州e时代网站建设,上海中学有哪些,新2代理网址我们在讨论java语言的内存问题时经常会听到一个词叫“JVM内存模型”#xff0c;这个词在实际使用中容易产生歧义#xff0c;因为它通常可能指代两个密切相关但不同的概念#xff1a;Java内存模型 (Java Memory Model, JMM)#xff1a;这是一个并发概念#xff0c;定义了Ja…我们在讨论java语言的内存问题时经常会听到一个词叫“JVM内存模型”这个词在实际使用中容易产生歧义因为它通常可能指代两个密切相关但不同的概念Java内存模型 (Java Memory Model, JMM)这是一个并发概念定义了Java线程如何通过内存进行交互特别是关于共享变量的可见性、顺序性和原子性。它规范了线程、主内存和工作内存之间的关系是volatile、synchronized、final等关键字语义的理论基础。JVM内存结构JVM Memory Structure这是JVM在执行程序时使用的内存区域的逻辑划分也就是我们常说的“堆”、“栈”等。大多数人日常所说的“JVM内存模型”指的是第一个——JVM内存结构即JVM在运行时如何划分和管理其内存空间。而Java内存模型是一个更偏底层的、关于并发编程的规范。下面我为你详细解释这两者的区别。一、JVM内存结构运行时数据区这是指JVM在执行Java程序过程中会把它管理的内存划分为若干个不同的数据区域。这些区域各有用途创建和销毁的时间也不同。根据《Java虚拟机规范》主要分为以下几个区域1. 程序计数器作用可以看作是当前线程所执行的字节码的行号指示器。字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。特点线程私有每个线程都有自己独立的程序计数器。唯一一个在JVM规范中没有规定任何OutOfMemoryError情况的区域。2. Java虚拟机栈作用描述Java方法执行的内存模型。每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。方法的调用和完成对应着栈帧在虚拟机栈中的入栈和出栈。存储内容主要存放编译期可知的各种基本数据类型boolean, byte, char, short, int, float, long, double、对象引用reference类型它不等同于对象本身可能是一个指向对象起始地址的引用指针也可能是指向一个代表对象的句柄或其他与此对象相关的位置。异常StackOverflowError如果线程请求的栈深度大于虚拟机所允许的深度。OutOfMemoryError如果虚拟机栈可以动态扩展但扩展时无法申请到足够内存。特点线程私有生命周期与线程相同。3. 本地方法栈作用与虚拟机栈非常相似。其区别在于虚拟机栈为执行Java方法也就是字节码服务而本地方法栈则为虚拟机使用到的Native方法服务如用C/C编写的方法。异常与虚拟机栈一样也会抛出StackOverflowError和OutOfMemoryError。4. Java堆作用是JVM所管理的内存中最大的一块。此内存区域的唯一目的就是存放对象实例。几乎所有的对象实例以及数组都在这里分配内存。特点所有线程共享。是垃圾收集器管理的主要区域因此也被称作“GC堆”。从内存分配的角度看线程共享的Java堆中可能划分出多个线程私有的分配缓冲区以提升对象分配时的效率。分代为了更好的回收内存或者更快的分配内存堆空间还可以细分为新生代(Young Generation)新创建的对象首先在这里分配。分为Eden区和两个Survivor区S0, S1。老年代(Old Generation/Tenured)在新生代中经历多次GC后仍然存活的对象会被移到这里。元空间(Metaspace) (Java 8) /永久代(PermGen) (Java 7及以前)用于存储类的元数据信息。注意从Java 8开始元空间使用的是本地内存不再属于Java堆的一部分。异常如果在堆中没有内存完成实例分配并且堆也无法再扩展时会抛出OutOfMemoryError。5. 方法区作用用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。演进在Java 7及之前方法区被实现为永久代是堆的一个逻辑部分。在Java 8及之后JVM移除了永久代引入了元空间作为方法区的实现。元空间不再使用JVM内存而是使用本地内存。这大大降低了OutOfMemoryError的风险。运行时常量池是方法区的一部分用于存放编译期生成的各种字面量和符号引用。二、Java内存模型JMM这是一个概念性的模型它是一个协议或规范用来定义程序中各种变量线程共享变量的访问规则以及在JVM中将变量存储到内存和从内存中取出变量这样的底层细节。JMM的核心目标是解决在并发环境下由于多线程访问同一共享数据所引发的数据不一致性、重排序等问题。JMM的关键概念主内存与工作内存主内存存储所有共享变量。对应物理硬件的主内存。工作内存每个线程都有自己的工作内存其中保存了该线程使用到的变量的主内存副本。线程对所有变量的操作读取、赋值等都必须在工作内存中进行而不能直接读写主内存中的变量。工作内存对应CPU的缓存和寄存器。内存间交互操作JMM定义了8种原子操作来规范主内存和工作内存之间的交互如lock锁定、unlock解锁、read读取、load载入、use使用、assign赋值、store存储、write写入。并发三大问题原子性JMM保证了read、load、assign、use、store、write这六个操作是原子的可以大致认为基本数据类型的访问读写是具备原子性的。如果需要更大范围的原子性可以使用synchronized关键字或Lock。可见性当一个线程修改了共享变量的值其他线程能够立即得知这个修改。JMM通过在变量修改后将新值同步回主内存在变量读取前从主内存重新读取值来实现可见性。关键字volatile、synchronized和final都能保证可见性。有序性在本线程内观察所有操作都是有序的“线程内表现为串行的语义”但在另一个线程中观察这些操作可能是无序的“指令重排序”现象。volatile和synchronized关键字可以保证线程之间操作的有序性。总结特性JVM内存结构运行时数据区Java内存模型JMM关注点内存空间的划分和管理并发环境下共享变量的访问规则和可见性内容堆、栈、方法区、程序计数器等主内存、工作内存、内存交互操作、happens-before原则等解决的问题对象创建、内存分配、垃圾回收多线程下的原子性、可见性、有序性问题比喻仓库的物理布局哪里放家具哪里放食品仓库的存取管理规定如何登记、何时可取、如何保证记录一致所以当有人问你“JVM内存模型”时你需要根据上下文判断他指的是物理上的内存布局JVM内存结构还是并发相关的抽象模型Java内存模型。在大多数关于内存溢出、GC的讨论中指的是前者而在讨论多线程、volatile、synchronized时通常指的是后者。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎么做一网站网站的空间

异常统一处理的优势提高代码可维护性 通过集中管理异常处理逻辑,避免重复代码,减少因异常处理分散导致的维护困难。统一处理机制使修改和扩展异常处理策略更加便捷。增强系统健壮性 统一捕获未处理的异常,防止程序意外终止。通过预设的降级策…

张小明 2025/12/26 13:39:12 网站建设

洛阳霞光企业网站建设公司wp可以做商城网站吗

智能家居设备连接故障排查终极指南:从频繁掉线到稳定连接的5步解决方案 【免费下载链接】core home-assistant/core: 是开源的智能家居平台,可以通过各种组件和插件实现对家庭中的智能设备的集中管理和自动化控制。适合对物联网、智能家居以及想要实现家…

张小明 2025/12/26 21:10:40 网站建设

龙泉做网站哪家好网站开发基础知识试题

数据集说明文档数据集核心信息表信息类别具体内容数据集类别包含 5 类目标,分别为 boat(船只)、buoy(浮标)、jetski(摩托艇)、life_saving_appliances(救生设备)、swimme…

张小明 2025/12/28 3:19:51 网站建设

南京网站设计开发怎样保证网站的安全

Spoolman终极指南:3步打造高效的3D打印丝材管理系统 【免费下载链接】Spoolman Keep track of your inventory of 3D-printer filament spools. 项目地址: https://gitcode.com/gh_mirrors/sp/Spoolman Spoolman是一款专为3D打印爱好者设计的开源丝材管理工具…

张小明 2025/12/26 21:10:36 网站建设

西安有哪些网站建设外包公司好网站设计的基本过程

第一章:Open-AutoGLM工作流优化概述Open-AutoGLM 是一个面向生成式语言模型自动化任务调度与执行的开源框架,旨在提升复杂推理流程的执行效率与资源利用率。通过对任务图的动态分析与调度策略优化,Open-AutoGLM 能够在多阶段推理场景中实现低…

张小明 2025/12/26 21:10:34 网站建设

做渠道的网站有哪些方面企业文化有哪些

Llama-Factory模型评估模块全面解读:准确率、困惑度一键生成 在大模型落地越来越密集的今天,一个现实问题摆在开发者面前:如何快速判断一次微调是否“有效”?不是看训练损失下降了多少,而是真正回答——这个模型现在能…

张小明 2025/12/28 5:39:51 网站建设