当前位置: 首页 > article >正文

JVM和运行时数据区

目录

运行时数据区

元空间

Java 虚拟机栈

java 堆

程序计数器

本地方法栈

JVM

        JVM是Java Virtual Machine的简称,是java程序的运行环境(二进制字节码的运行环境)。主要由三个子系统构成,分别是类加载子系统、运行时数据区和执行引擎。

JVM结构图

运行时数据区

运行时数据区是由元空间、堆、程序计数器、虚拟机栈、本地方法栈五部分组成。

元空间

        用于存储已被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据的区域。被所有线程共享,多个线程可以同时访问方法区中的类信息和常量等。

        在 JDK 7 及以前的实现方式,它和堆一样,都是 JVM 内存的一部分,并且有固定的大小限制。永久代不仅存储类的元数据,还存储了字符串常量池等信息。从 JDK 8 开始,永久代被元空间取代。元空间不再使用 JVM 的内存,而是使用本地内存,这使得元空间的大小不再受 JVM 内存大小的限制,而是受限于操作系统的可用内存。同时,字符串常量池从方法区移动到了堆中

        在 JDK 8 之前,如果方法区(永久代)的内存设置过小,可能会导OutOfMemoryError: PermGen space 错误。在 JDK 8 及以后,如果元空间的内存使用超过了限制,会抛出OutOfMemoryError: Metaspace 错误。

Java 虚拟机栈

        每个 Java 线程在创建时都会分配一个独立的虚拟机栈,用于存储方法参数和方法内部定义的局部变量。每个栈由多个栈帧组成,对应这每次方法调用时占用的内存,栈帧过多会导致栈内存溢出,常见于递归调用。

java 堆

        用于保存对象实例、数组等,使得程序可以动态地创建和使用对象。为了高效地进行垃圾回收,堆通常被分为不同的区域,常见的分代垃圾回收机制将堆分为新生代和老年代。其中,新生代又可进一步细分为 Eden 区和两个 Survivor 区。新创建的对象通常会首先分配在 Eden 区,经过多次垃圾回收后仍然存活的对象会被移动到老年代。

        程序在申请内存时,如果堆没有足够的内存空间供其使用,就会出现内存溢出的情况,从而导致程序抛出OutOfMemoryError异常。程序在运行过程中,如果由于某些原因导致一些不再使用的对象无法被垃圾回收器回收,一直占用内存空间,会使得可用内存逐渐减少,这时就会出现内存泄漏的情况。

程序计数器

        用于保存字节码的行号,记录正在执行的字节码指令地址。每个 Java 线程都有自己独立的程序计数器,可以在执行过程中独立记录自己的执行位置,不受到其他线程的干扰。

本地方法栈

        与 Java 虚拟机栈类似,本地方法栈是为虚拟机使用到的本地方法服务的。本地方法是使用非 Java 语言(如 C、C++)实现的方法,通常用于与操作系统底层交互或调用其他本地库。每个线程都有自己独立的本地方法栈,与 Java 虚拟机栈相互独立。

        和 Java 虚拟机栈一样,本地方法栈也可能会抛出 StackOverflowErrorOutOfMemoryError 异常。当本地方法调用层次过深或无法申请到足够的内存时,就会触发相应的异常。


http://www.kler.cn/a/582430.html

相关文章:

  • 国产化信创操作系统的电脑,能运行windows程序吗
  • 关于回归中R2指标的理解
  • docker搭建elk
  • 【学写LibreCAD】 4.1 RS_Undoable文件
  • 【Linux内核系列】:文件系统
  • 一文说清docker及docker compose的应用和部署
  • UI显示不出来问题(有的能显示出来一个方法,有的数据显示不出来另一个方法),多次尝试无果
  • CSPM-3级国标认证,项目管理如何成为组织变革的核心引擎?
  • 裂变营销策略在“开源链动2+1模式AI智能名片S2B2C商城小程序”中的应用探索
  • JavaScript性能优化实战:让你的Web应用飞起来
  • AI+API引爆数据分析:BI已成过去?
  • 【漫话机器学习系列】133.决定系数(R²:Coefficient of Determination)
  • 微电网管理 实现分布式能源的智能调度和管理
  • ROS——节点、工作空间、功能包
  • 【18】单片机编程核心技巧:变量赋值与高位填充机制
  • 每日一题——两两交换链表中的节点
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)
  • Spring Boot集成EasyExcel
  • 自学Java-Java高级技术(单元测试、反射、注解、动态代理)
  • wps word 正文部分段前段后间距调整无用