JVM结构

在这里插入图片描述
在这里插入图片描述
JVM分为三代:年轻代(Young Generation)、年老代(Old Generation)、持久代(Permanent Generation)。之所以分成三代是为了更好的处理内存。 年轻代:年轻代分为三个区:一个eden区和两个Survivor区。程序首先运行时是在eden区运行,如果eden区存满了对对象,那么就复制到Survivor区。先将存活对象复制到第一个Survivor区即S0,如果第一个Survivor区也存满了那么就会复制第二个Survivor区即S1。如果第二个Survivor区也存满了,那么就会将对象复制到年老代(Old Generation)。 年老代就是处理在年轻代中通过GC回收机制后还存活的对象

持久代主要是存放一些静态的方法、类等。所以持久代GC内存回收并没有明显效果。 JVM之所以需要分代,是为了更好的去使用内存,让内存的使用效率达到最佳,当然分代之后就需要对不同的代采用不同的收集方式,对其内存进行回收。 由于程序在运行过程会使用到很基本类型的和引用数型数据,如session对象、socket对象等。而这些对象可数据其生存期是不一样的,所以最后在程序运行会将这些不同的对象划分到不同代中,然后不同的代使用不同收集内存方式。

在java 8之前JVM第三代都是持久代PermGen,在java 8和之后的版本都是Metaspace元空间。
在这里插入图片描述
JVM在运行时,将分内存划分为heap memory和non-heap memory两类。

在JVM使用年轻代和年老都在heap memory。

meatspace、thread等都是在non-heap memory。

将PermGen持久代换成Metaspace元空间主要是优化以下几个问题:

1.字符串变化问题

以前的版本中PermGen会存储一些字符串,PermGen内存的大小是通过-xx:PermSize这个参数来设置的,但是由于字符串池的大小经常是变化的,导致设置-xx:PermSize这个参数变的困难,这样很容易出现OOM提示的错误 ,java.lang.OutOfMemoryError: PermGen space。

java 8之后是将字符串对象放在堆内存。这样避免OOM问题的出现。

2.方法区变化

以前将方法主要存储在PermGen,现在将方法都移动Metaspace,Metaspace不在JVM中,而是在本地的内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我无法提供图片或图表。但是,我可以为您描述JDK的JVM结构。 JDK(Java Development Kit)是Java的开发工具包,其中包含了JRE(Java Runtime Environment)和一系列的开发工具。JVM(Java Virtual Machine)是JDK中的一个重要组成部分。 JVM是一个虚拟机,它负责解释和执行Java字节码文件。它是Java程序运行的环境。JVM内部包含了多个组件,包括类加载器、解释器、即时编译器、垃圾收集器等。 类加载器负责加载Java类文件,并将其转换为JVM可以理解的格式。解释器负责解释字节码文件,并逐行执行其中的指令。即时编译器可以将热点代码(经常执行的代码)编译成本地机器码,以提高执行效率。垃圾收集器负责回收不再使用的内存空间。 JVM结构可以简单描述为:JVM包含了类加载器、解释器、即时编译器和垃圾收集器等组件,它们共同协作来解释和执行Java字节码文件。 希望这个描述对您有所帮助。如果您需要更详细的信息,请参考JDK的官方文档。 #### 引用[.reference_title] - *1* *2* *3* [JDK、JRE、JVM 之间的关系](https://blog.csdn.net/m0_56673710/article/details/126093658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值