当前位置:首页 > 内存 > 正文

jvm的五大内存区域

  • 内存
  • 2024-06-08 08:35:58
  • 564

一、Java中内存分为几块你告诉Jvm内存空间。
当方法(代码)中定义变量时,Java会在变量堆栈上分配内存空间。space
JVM内存组成区
JVM内存分为四种:
1栈段(stacksegment)——自动分配、释放和存储通过编译器指定的函数参数值、局部变量值等,指定执行模式后,系统自动释放JVM内存资源
2.程序员,存储的是new对象和衣服创建的,jvm时不时会出现这个对象,如果没有这个对象的引用,就会被回收
3.-存储全局变量、稳定变量和字符串常量,并且不释放
4.并且多个对象共享代码空间区域
一次定义一个(代码块)当进入一个变量时,Java将该变量放在栈上的内存空间超出,Java会自动释放该变量JVM为变量分配的内存空间;堆上的JVM内存分配由Java虚拟机控制,内存大小由垃圾收集器本身管理,编译器不需要提前声明,因为它在运行时动态分配JVM内存。缺点是JVM内存必须在运行时动态分配,访问速度慢;堆的优点是访问速度比堆快,缺点是数据的大小和寿命都保存在里面。桩必须坚固、不灵活。
◆爪哇土丘由彼尔姆和积云地区组成。并到该地区。堆
分为两个块,一个是NEWGeneration,另一个是OldGeneration。from,to)用于存储每次垃圾收集中幸存下来的对象。OldGeneration中,JVM主要为应用程序中生命周期较长的对象存储内存。还有PermanentGeneration,主要用来存储JVM对象的具体反射,比如对象、对象方法等。
在NewType块中,垃圾回收通常使用Effingo算法,速度很快。在每次GC期间,幸存者事件首先从Eden传输到SurvivorSpace。因此,每次GC之后,EdenJVM块都会在内存中打开。在OldGeneration块中,垃圾收集通常采用紧凑算法,速度较慢,但​​减少了JVM内存需求。
垃圾收集分为几个级别,0级是完全(full)垃圾收集。老段垃圾将进行回收;1或以上是部分垃圾回收,只有垃圾会被回收到NOVA中,而不是JVM内存空间来容纳新的Java对象。
JVM调用GC的频率还是很高的。垃圾收集主要在两种情况下执行:线程调度空闲时;当回收不能解决JVM内存堆不足的问题时,就会读取内存。由于该异常取决于操作系统环境,因此无法预测何时会发生。
根据GC机制,运行的程序会使操作系统环境发生变化,增加GC被激活的机会。为了避免这些问题,程序的设计和编写应该避免垃圾对象和GC头对JVM内存的占用。显然调用()只能告诉JVM清理JVM内存中需要回收的对象,但并不能立即回收。并且还会增加GC的消耗。
◆当访问该地址时,JVM进程调度内存区域如下:
AJavaObject
B.否则,在下一个级别
会尝试释放Eden中的所有空闲对象(这适用于级别1或更高级别的垃圾收集)。放入新的东西,然后将Eden中的一些活跃对象放入生存区
D空间中,Survivor区的对象会被移动到Old,否则在生存区
E将在OLD区域保留收集(0级)
清除整个垃圾
F.收集整个垃圾后,如果SURVIVOR和OLDAreas仍然无法存储一些从Eden复制的对象,导致JVM无法创建.如果在Eden区域中添加JVM内存区域的新对象,就会发生“内存错误”。


二、JVM概念及体系结构JVM(JavaVirtualMachine)是Java的基石,是使Java语言能够跨平台运行的关键组件。市场上有很多知名的实现,例如OracleHotSpot、OpenJDK、IBMJ9、AzulZing和ExcelsiorJET,它们都在保证程序稳定运行方面发挥着核心作用。
OracleHotSpotJVM的架构经过精心设计,由几个关键部分组成:首先是类加载器,负责解析和加载类信息,然后是运行时数据区,包括方法区;堆和栈。方法区存储类的元数据和常量,例如编译时常量池。如果内存不足,可能会出现OutOfMemoryError。堆(-Xms和-Xmx)是类实例和数组的存储区域。当需求超过可用内存时,程序将抛出OutOfMemoryError。栈,具体来说是-Xss指定的线程局部存储区域,负责存储局部变量和方法调用信息,当栈溢出时,就会出现StackOverflowError。
执行引擎是JVM的核心,它包括解释器和即时编译器,它们协同工作。解释器逐行运行字节码,而即时编译器可以提高效率。JVM在始阶段通过解释器智能动态地选择执行模式,然后编译热代码以提高性能。程序员可以通过调整JVM参数来控制这两种执行模式之间的切换。
内存管理是JVM的重要职责。垃圾收集器使用复制、标记或标记排序等策略来自动释放不再使用的内存,同时允许用户自定义收策略。。原生方法栈(-Xoss)支持原生方法,也面临栈溢出和内存不足的风险。
类加载子系统负责类的生命周期管理,从加载、链接到初始化,保证代码的正确性和安全性。Java标准库(和其他库)丰富多样,包括加密、命名、管理、消息处理和其他API,并为多样化的应用程序开发提供了强大的工具箱。
总的来说,JVM架构复杂精密,各个部分对于保证Java程序的高效稳定运行都起着不可或缺的作用。深入了解JVM的工作原理对于Java开发人员至关重要。它不仅可以提高代码性能,还有助于解决并发和内存管理等问题。