我们知道在jvm中存放了不少数据,那么存放数据的地方叫做存储区。想必大家还不知道存储区是分为两种类型的,常量缓冲池和方法区。相信很多人还没有接触到这个概念,本篇对java中jvm的存储区进行的内容的整理,下面一起来看看这两种存储取的概念和区别吧。
1、分类
JVM有两种类型的存储区:常量缓冲池和方法区。常量缓冲池用于存储类名、方法名和字段名以及字符串常量。方法区用于存储Java方法的字节码。JVM规范中没有规定这两个存储区域的具体实现。因此,Java应用程序的存储布局必须在运行过程中确定,这取决于具体平台的实现。
JVM是对Java字节代码定义的独立平台的规格说明,是Java平台独立性的基础。目前JVM还存在一些限制和不足,需要进一步完善,但无论如何,JVM的思想都是成功的。
2、比较分析
将Java源程序想象为我们的C++源程序,Java源程序编译后生成的字节代码相当于C++源程序编译后的80x86机器代码(二进制程序文件),JVM虚拟机相当于80x86计算机系统在80x86CPU运行的是机器代码,在Java解释器运行的是Java字节代码。
Java解释器相当于运行Java字节码的CPU,但这种CPU不是通过硬件实现的,而是通过软件实现的。Java解释器实际上是特定平台下的应用程序。只要实现了特定平台下的解释器程序,Java字节码就可以通过解释器程序在该平台下运行,这是Java跨平台的根本。目前,并非所有平台下都有相应的Java解释器程序,这也是Java不能在所有平台下运行的原因,只能在实现Java解释器程序的平台下运行。
以上就是java之jvm两种存储区类型的介绍,相信经过本篇的学习,大家已经对存储区的类型有所了解,并能够对它们进行区分啦。更多Java学习指路:
伴沃教育还为您提供以下相关内容希望对您有帮助:
JVM内存溢出的两大类型及解决方案
java lang OutOfMemoryError:PermGenspace JVM管理两种类型的Java内存 堆和非堆 堆是给开发人员用的上面说的就是 是在JVM启动时创建 非堆是留给JVM自己用的 用来存放类的信息的 它和堆不同 运行期内GC不会释放空间 如果webapp用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小 ...
详解JVM内存结构组成
MethodArea(方法区域) 被装载的class的信息存储在Methodarea的内存中 当虚拟机装载某个类型时 它使用类装载器定位相应的class文件 然后读入这个class文件内容并把它传输到虚拟机中 JavaStack(java的栈) 虚拟机只会直接对Javastack执行两种操作 以帧为单位的压栈或出栈 ProgramCounter(程序计数器) 每一个...
哪些内存区域属于jvm规范
4. 堆(Heap):存储对象实例和数组,由Java堆空间管理器负责内存分配和回收。5. 直接内存(Direct Memory):JVM可以直接访问和操作的内存区域,主要用于快速的数据传输和交换。6. 方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量等数据。以上这些区域共同构成了JVM规范定义的内存布局...
高效打工方法,JVM详解(JVM 内存模型、堆、GC、直接内存、性能调优...
Java堆作为最大的内存区域,存放对象实例,是垃圾收集器管理的主要区域,支持动态调整大小。方法区存储已加载类的信息、常量、静态变量等,具有有限大小,用于类加载和运行时管理。直接内存直接向系统申请,主要用于NIO操作,性能优势明显但分配回收成本较高。堆内外内存管理与垃圾回收策略息息相关。JVM堆被细...
【JAVA篇】JVM 堆内存问题排查之 MAT
JVM内存主要分为堆内内存(on-heap)和堆外内存(off-heap)。堆内内存,即Java堆区域,即使配置了-Xmx4g,实际使用可能超过5G,因为每个线程除了在堆中创建线程对象,还会分配虚拟机栈。过多线程可能导致内存溢出。堆外内存,如堆外内存泄露,虽然少见,但在对性能要求高的场景更为显著,本文主要聚焦堆...
java线程存放在jvm的哪个区域?方法又存放在哪个区呢?
聊到JAVA中的方法,大多数人对于方法存储在方法区还是栈区(虚拟机栈)是很迷茫的。其实方法是存在方法区的下面我们就细细说一下JVM中的 方法区 VS 栈区方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这 ...
Java 缓存有哪些
Java缓存主要有以下几种:一、JVM内部缓存 JVM内部缓存主要包括Java堆内存和方法区等。其中,堆内存用于存储对象实例,是Java缓存管理的重要部分。方法区则主要存储已被虚拟机加载的类信息、常量、静态变量等数据。JVM内部缓存由Java虚拟机自动管理,开发者可以通过调整JVM参数来优化缓存性能。二、应用级缓存 ...
Java面试相关—堆和栈
2. JVM内存分区在JVM中,数据存储在三个主要分区:栈区(包含方法区)、堆区和寄存器。栈区速度快,用于临时数据,而堆区用于持久数据。方法区存放静态数据和常量。3. 数据类型与内存示例 字面值和引用的区别:栈内存中的字面值不会影响其他引用的值。 String对象示例:new String()创建的对象在堆...
17张图带你了解,JVM 运行时数据区
内存管理中,JVM将内存划分为线程共享和线程私有区域。共享部分包括方法区和堆,它们随虚拟机启动和关闭而创建和销毁。堆用于存储所有线程的对象实例,是垃圾收集器的主要管理区域。方法区则存放类型信息、运行时常量池、静态变量和JIT代码等。每个Java线程对应一个虚拟机栈,包含栈帧,用于存储方法执行的局部...
JAVA技术-JVM常用配置参数有哪些?
常用JVM参数分为三类,分别是以-、-X、-XX开头的参数。了解GC日志能够分析JVM发生GC时各数据区状态。运行时数据区包括栈、堆、方法区、直接内存,常使用-XX命令配置。栈:线程私有,大且多线程场景下可能导致内存不足。堆:存储对象实例,大小调整需谨慎,避免OOM。方法区:存储类、方法信息,大小调整...