首页 > 系统相关 >1. 简述一下JVM内存模型

1. 简述一下JVM内存模型

时间:2025-01-07 15:48:32浏览次数:1  
标签:虚拟机 简述 线程 内存 JVM GC 方法

JVM内存分为线程私有区和线程共享区

线程私有区:

  1. 程序计算器
    当同时进行的线程数超过CPU数或内核数时,就要通过时间片轮徇分派CPU的时间资源,不免发生线程切换。这时,每个线程就需要一个属于自己的计数器来记录下一条要运行的指令。
    如果执行的是JAVA方法,计数器记录正在执行的java字节码地址。
    如果执行的是native方法,则计数器为空。

  2. 虚拟机栈
    线程私有的,与线程在同一时间创建。管理JAVA方法执行的内存模型。
    每个方法执行时都会创建一个栈桢来存储方法的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。
    栈的大小决定了方法调用的可达深度(递归多少层次或嵌套调用多少层其他方法,-Xss参数可以设置虚拟机栈大小)。
    栈的大小可以是固定的,或是动态扩展的。如果请求的栈深度大于最大可用深度,则抛出StackOverFlowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutOfMemoryError。
    使用JClassLib工具可以查看class类文件的结构。下图为栈桢结构图:

  3. 本地方法栈
    与虚拟机栈作用类似,但它不是为Java方法服务的,而为本地方法(C语言)。由于规范对这块没有强制要求,不同虚拟机实现方法不同。

线程共享区:

  1. 方法区
    线程共享的,用于存放被虚拟机加载的类的元数据信息,如常量、静态变量和即时编译器编译后的代码。


  2. 存放对象实例和数组,是垃圾回收的主要区域,分为新生代和老年代。刚创建的对象在新生代的Eden区中,经过GC后进入新生代的S0区中,再经过GC进入新生代的S1区中,默认15次GC后仍存在就进入老年代。这是按照一种回收机制划分的,不是固定的。若堆中的空间不够实例分配,则OutOfMemoryError。

标签:虚拟机,简述,线程,内存,JVM,GC,方法
From: https://www.cnblogs.com/tim-zuo/p/18657742

相关文章

  • java和集合和JVM
    Java语言有哪些特点?面向对象(封装,继承,多态),平台无关性(Java虚拟机实现平台无关性),可靠性(具备异常处理和自动内存管理机制)。.java文件(java源代码文件)经javac编译器编译成.class文件(字节码文件)JVM类加载器再加载字节码文件,解释器逐行解释执行;OpenJDK开源;Java和C++的区别?......
  • 描述一下 JVM 加载 Class 文件的原理机制
    JVM加载Class文件的原理机制涉及多个步骤和组件,主要包括类加载器(ClassLoader)和类加载过程。下面详细描述这些机制:1.类加载器(ClassLoader)类加载器是JVM中负责加载类的组件。JVM提供了三种主要的类加载器:启动类加载器(BootstrapClassLoader):负责加载Java核心库(如......
  • 内存模型以及分区,需要详细到每个区放什么
    JVM(Java虚拟机)内存模型是Java程序运行时的内存管理机制。JVM将内存划分为多个区域,每个区域用于存储不同类型的数据。下面详细解释JVM内存模型及其分区。JVM内存模型JVM内存模型主要包括以下几个部分:堆内存(HeapMemory)用于存储对象实例和数组。是垃圾收集器管理的主要区域。......
  • 操作系统之内存管理应该实现的功能
    目录一、引言二、内存空间的分配与回收三、内存空间的扩充覆盖技术交换技术四、内存保护与共享内存保护内存共享五、虚拟存储技术一、引言传统存储管理方法,包括内存空间的分配与回收、地址转换,以及内存扩充技术,并在此基础上引出现代虚拟存储技术。二、内存空间......
  • 大文件下载防内存溢出简单实现
    摘要:利用StreamingResponseBody来防止内存溢出,实现大文件下载。一、配置异步请求超时时间1/**2*@Description:异步请求配置类3*@Date:Createdin17:192025/1/54*@Author:Cenobitor5*@ModifiedBy:6*@since0.1.07*/8@Configuration9......
  • JVM实战—11.OOM的原因和模拟以及案例
    大纲1.线上系统突然由于OOM内存溢出挂掉2.什么是内存溢出及哪些区域会发生内存溢出3.Metaspace如何因类太多而发生内存溢出4.无限制调用方法如何让线程的栈内存溢出5.对象太多导致堆内存实在放不下而内存溢出6.模拟JVMMetaspace内存溢出的场景(动态生成268个类占10M)7.模......
  • 【嵌入式编程】内存分布
    一、内存分布图在操作系统中,内存被组织和管理以支持进程的运行。以下是一些常见的内存分布概念:【内核空间】:操作系统内核使用的内存区域,用于存储内核代码、数据结构和进程控制块(PCB)。【用户空间】:存储用户的代码。未初始化变量区(.bss):存放未初始化的全局变量和静态变......
  • 第二章 内存寻址
    1.内存地址逻辑地址、虚拟地址、线性地址、物理地址,它们是很绕的逻辑,有些和Intel绑定的概念,没有必要完全区分;可以认为,地址包括:虚拟地址和物理地址两种。 1.1.逻辑地址程序编译后的地址 1.2.线性地址程序运行时的内存地址 1.3.物理地址内存总线上的地址如......
  • 升级服务器数据盘大小、内存和CPU是否会丢失数据
    用户计划升级服务器的数据盘大小、内存和CPU,但担心这些操作会导致现有数据丢失。特别是对于网站程序和数据库文件的安全性表示担忧。解决方案:问题解决方案升级数据盘是否会丢失数据正常情况下,升级数据盘不会导致数据丢失。只要按照正确步骤操作,原有数据将保持完整。......
  • RocketMQ原理简述(二)
    1.前言此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客:RocketMQ相关原理简述-CSDN博客2.topic,messageQueue,broker  topic的创建的时候需要进行指定MessageQueue的数量,那么t......