首页 > 系统相关 >JVM内存管理

JVM内存管理

时间:2024-04-29 17:33:41浏览次数:31  
标签:管理 虚拟机 线程 内存 JVM 空间 Metaspace

  在JVM初识中提到之所以在程序和操作系统之间增加JVM,就是JVM有些内存管理的特性直接在操作系统上实现有些费劲。那么JVM的内存管理是怎样的呢?

  应用程序运行大致如下过程:                   

                

   其中内存部分就是运行时数据区,即虚拟机的内存结构。                                   

                

                

                 

  其中线程私有的:1)程序计数器  2)虚拟机栈  3)本地方法栈

  线程共享的:1)堆 2)方法区

  直接内存也是线程共享,但其不属于运行时数据区的一部分。下面就内存部分,分结构介绍:

  一、计数器PC Register:也叫PC寄存器,是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。

                

  二、虚拟机 Stacks

                

    该结构可配置大小,可以优化的一个点:

      -Xss 为jvm启动的每个线程分配的内存大小:

        Linux/x64 (64-bit): 1024 KB
        macOS (64-bit): 1024 KB
        Oracle Solaris/x64 (64-bit): 1024 KB
        Windows: The default value depends on virtual memory
          -Xss1m
          -Xss1024k
          -Xss1048576

    局部变量:

                

                     

  三、Native Method Stacks:其为为虚拟机使用到的本地(Native) 方法服务。

    在Java虚拟机规范中,对本地方法栈这块区域,与Java虚拟机栈一样,规定了两种类型的异常:
      (1)StackOverFlowError :线程请求的栈深度>所允许的深度。
      (2)OutOfMemoryError:本地方法栈扩展时无法申请到足够的内存。

  四、Heap

    1)堆大小设置

      内存大小-Xmx/-Xms,使用示例: -Xmx20m -Xms5m

    堆分配——分配对象的流程:

                

                

                

  五、Metaspace

    其参数设置如下:

    -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。如果没有使用该参数来设置类的元数据的大小,其最大可利用空间是整个系统内存的可用空间。JVM也可以增加本地内存空间来满足类元数据信息的存储。但是如果没有设置最大值,则可能存在bug导致Metaspace的空间在不停的扩展,会导致机器的内存不足;进而可能出现swap内存被耗尽;最终导致进程直接被系统直接kill掉。如果设置了该参数,当Metaspace剩余空间不足,会抛出:java.lang.OutOfMemoryError: Metaspace space

    -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集

    -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

     查看该区值:

                    

  

标签:管理,虚拟机,线程,内存,JVM,空间,Metaspace
From: https://www.cnblogs.com/ilovebath/p/18163778

相关文章

  • 微服务体系-docker容器cpu内存管理
    在微服务体系中,我们使用docker去部署微服务,在服务器资源有限的情况下。由于某个的服务(docker容器)cpu使用过高,或者内存使用过高会导致整个的服务器的崩溃。针对这个问题,我采取了以下措施:在dockerrun命令中添加--cpus=2--memory=4g --cpus=2:设置cpu最多使用2个核心数......
  • openGauss MOT本地内存和全局内存
    MOT本地内存和全局内存SILO管理本地内存和全局内存,如所示。全局内存是所有核共享的长期内存,主要用于存储所有的表数据和索引。本地内存是短期内存,主要由会话使用,用于处理事务及将数据更改存储到事务内存中,直到提交阶段。当事务需要更改时,SILO将该事务的所有数据从全局内存复......
  • openGauss MOT管理
    MOT管理下面介绍MOT管理。MOT持久性MOT恢复MOT复制和高可用MOT内存管理MOTVACUUM清理MOT统计MOT监控MOT错误消息详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss SSL证书管理
    SSL证书管理openGauss默认配置了通过openssl生成的安全证书、私钥。并且提供证书替换的接口,方便用户进行证书的替换。证书生成-TLS证书生成-TLCP证书替换主备证书认证配置详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss MOT本地内存和全局内存
    MOT本地内存和全局内存SILO管理本地内存和全局内存,如所示。全局内存是所有核共享的长期内存,主要用于存储所有的表数据和索引。本地内存是短期内存,主要由会话使用,用于处理事务及将数据更改存储到事务内存中,直到提交阶段。当事务需要更改时,SILO将该事务的所有数据从全局内存复......
  • openGauss MOT内存管理
    MOT内存管理规划和微调请参见MOT内存和存储规划和MOT配置。详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss MOT内存和存储规划
    MOT内存和存储规划本节描述了为满足特定应用程序需求,在评估、估计和规划内存和存储容量数量时,需要注意的事项和准则,以及影响所需内存数量的各种数据,例如计划表的数据和索引大小、维持事务管理的内存以及数据增长的速度。MOT内存规划MOT是一种内存数据库存储引擎(IMDB),其中所有表......
  • openGauss SSL证书管理
    SSL证书管理openGauss默认配置了通过openssl生成的安全证书、私钥。并且提供证书替换的接口,方便用户进行证书的替换。证书生成-TLS证书生成-TLCP证书替换主备证书认证配置详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 创建和管理分区表
    创建和管理分区表背景信息openGauss数据库支持的分区表为范围分区表、间隔分区表、列表分区表、哈希分区表。范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进......
  • Dell R720 内存纠错比率超限 更换内存引起的故障
    DellR720内存纠错比率超限更换内存引起的故障2019年12月18日 8823点热度 27人点赞 0条评论0x01前言服务器里有一根内存出现异常,在除错的过程中我详细了解R720的内存配置。我在这里将除错过程和基本配置信息记录下来。0x02错误在上周,我发现服务器后部的状态灯不再......