首页 > 系统相关 >JVM系列一:JVM内存组成及分配

JVM系列一:JVM内存组成及分配

时间:2023-08-28 10:31:39浏览次数:31  
标签:系列 虚拟机 默认 GC 内存 JVM 非堆


java内存组成介绍:堆(Heap)和非堆(Non-heap)内存

       按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

组成图

JVM系列一:JVM内存组成及分配_物理内存

  • 方法栈&本地方法栈:
    线程创建时产生,方法执行时生成栈帧
  • 方法区
    存储类的元数据信息 常量等

  • java代码中所有的new操作
  • native Memory(C heap)
    Direct Bytebuffer JNI Compile GC;

 

堆内存分配

       JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

 

JVM系列一:JVM内存组成及分配_java_02

组成

详解

Young Generation

即图中的Eden + From Space + To Space

Eden

存放新生的对象

Survivor Space

有两个,存放每次垃圾回收后存活的对象

Old Generation

Tenured Generation 即图中的Old Space 

主要存放应用程序中生命周期长的存活对象

      非堆内存分配
      JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

组成

详解

Permanent Generation

保存虚拟机自己的静态(refective)数据

主要存放加载的Class类级别静态对象如class本身,method,field等等

permanent generation空间不足会引发full GC(详见HotSpot VM GC种类)

Code Cache

用于编译和保存本地代码(native code)的内存

JVM内部处理或优化

      JVM内存限制(最大值)

      JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),而64bit以上的处理器就不会有限制了。

相关文章:

参考文章:


http://www.7dtest.com/site/html/74/t-4574.html

Sun JDK 1.6内存管理



redcreen

标签:系列,虚拟机,默认,GC,内存,JVM,非堆
From: https://blog.51cto.com/u_16237557/7260914

相关文章

  • 常用环境设置jvm内存
    参数解释:Xms—堆内存初始大小Xmx—堆内存最大值MetaspaceSize—永久内存初始大小MaxMetaspaceSize—永久内存最大值-XX:+UseConcMarkSweepGC  使用cms并行垃圾回收机制 内存大小设置:jstat-gc进程号 查看OU即是老年代(KB)根据老年代设置参数Java堆大小设置,Xms......
  • ETL之apache hop系列3-hop Server环境部署与客户端发布管道工作流
    前言该文档主要是apachehop2.5的Windows10和Linuxdocker环境部署和客户端发布工作流和管道的相关内容不使用Docker直接使用应用程序包,下载压缩包文件后,需要解压缩文件并使用以下命令启动HopGUI:在Linux上:./hop-gui.sh在Windows上(需要JDK11):Hop-gui.bat一、Windo......
  • 操作系统学习笔记(三)——内存管理
    一、虚拟内存将进程所用的地址隔离开,让操作系统为每个进程分配独立的一套虚拟地址。虚拟内存可以使进程的运行内存超过物理内存的大小。进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存,如下图所示:有两种映射方......
  • JVM调优工具详解及调优实战
    前置启动程序事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 Jmap此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap-histo14660#查看历史生成的实例jmap-histo:live14660#查看当前存活的实例,执行过程中可能会触发一次full......
  • 多行多列合并成一列内存数组的结果
    问题:多行多列合并成一列内存数组的结果函数公式解决:{=PHONETIC(OFFSET(A1:E1,ROW(1:23)-1,))}用Offset函数生成一个多维引用,每个平面分别是A:E表的每一行。利用Phonetic函数将每个平面里的内容进行合并。此公式的缺陷在于被合并的内容只能是文本,如果数据源中包含数值、日......
  • 无涯教程-进程 - 内存映射
    mmap()系统调用提供了将文件或设备映射到内存的调用进程的虚拟地址空间中的映射。这有两种类型-文件映射 - 此映射将进程的虚拟内存区域映射到文件,这意味着读取或写入那些内存区域会导致文件被读取或写入,这是默认的映射类型。匿名映射 - 此映射进程的虚拟内存区域,没有......
  • 模拟集成电路设计系列博客——1.3.1 Cascode增益级
    1.3.1Cascode增益级在现代IC设计中,单管放大器常被用于Cascode结构中,这种结构由一个共源极接法的晶体管连接一个共栅极接法的晶体管组成。下图展示了Cascode增益级的两种形式。在(a)中,有一个n沟道共源极管子\(Q_1\)和一个n沟道共栅极管子\(Q_2\),这种结构也被称作套筒Cascode结构......
  • WinDbg排查.net性能或内存问题步骤简述
    目录一、安装WinDbg二、诊断数据获取三、加载分析四、举例分析以下步骤是分析高CPU占用的命令本文摘自一、安装WinDbg第一步当然是安装了,需要注意的是,千万不要搜索windbg然后下载,搜索到的windbg安装文件,都不是我们想要的,真正的windbg,实际上是在微软的SDK里,下载链接在这里:ht......
  • JVM 与 GC 讲解
    目录一、概述二、JVM内存模型三、GC算法和回收器1)垃圾回收算法2)垃圾回收器四、垃圾回收机制(GC)1)分代垃圾回收机制2)G1垃圾回收器3)FullGC机制一、概述JVM(JavaVirtualMachine)是一种在计算机上运行Java字节码的虚拟机。它允许Java程序在不同的操作系统上具有跨平台的能力,因为......
  • 聊天机器人预热-AI基础系列文章第11篇
    您的关注是对我最大的支持......