首页 > 编程语言 >Java面试题虚拟机为什么使用元空间替换了永久代(JVM篇)

Java面试题虚拟机为什么使用元空间替换了永久代(JVM篇)

时间:2024-11-03 18:47:48浏览次数:6  
标签:面试题 Java 虚拟机 永久 XX 内存 空间

前言

本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!虚拟机为什么使用元空间替换了永久代?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘

*** 12万字的java面试题整理 ***

虚拟机为什么使用元空间替换了永久代

***「什么是元空间?什么是永久代?为什么用元空间代替永久代?」***我们先回顾一下「方法区」吧,看看虚拟机运行时数据内存图,如下:
4.png
方法区和堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

「什么是永久代?它和方法区有什么关系呢?」
如果在HotSpot虚拟机上开发、部署,很多程序员都把方法区称作永久代。可以说方法区是规范,永久代是Hotspot针对该规范进行的实现。在Java7及以前的版本,方法区都是永久代实现的。
「什么是元空间?它和方法区有什么关系呢?」
对于Java8,HotSpots取消了永久代,取而代之的是元空间(Metaspace)。换句话说,就是方法区还是在的,只是实现变了,从永久代变为元空间了。
「为什么使用元空间替换了永久代?」

  • 永久代的方法区,和堆使用的物理内存是连续的。
    5.png

***「永久代」***是通过以下这两个参数配置大小的~
-XX:PremSize:设置永久代的初始大小
-XX:MaxPermSize: 设置永久代的最大值,默认是64M

对于「永久代」,如果动态生成很多class的话,就很可能出现「java.lang.OutOfMemoryError:
PermGen space错误」,因为永久代空间配置有限嘛。最典型的场景是,在web开发比较多jsp页面的时候。

  • JDK8之后,方法区存在于元空间(Metaspace)。物理内存不再与堆连续,而是直接存在于本地内存中,理论上机器「内存有多大,元空间就有多大」。
    6.png

可以通过以下的参数来设置元空间的大小:

  • -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
  • -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
  • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
  • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

「所以,为什么使用元空间替换永久代?」
表面上看是为了避免OOM异常。因为通常使用PermSize和MaxPermSize设置永久代的大小就决定了永久代的上限,但是不是总能知道应该设置为多大合适, 如果使用默认值很容易遇到OOM错误。当使用元空间时,可以加载多少类的元数据就不再由MaxPermSize控制, 而由系统的实际可用空间来控制啦。

标签:面试题,Java,虚拟机,永久,XX,内存,空间
From: https://blog.csdn.net/2401_87718562/article/details/143468954

相关文章

  • JavaScript的DOM操作
    JavaScript的DOM(DocumentObjectModel,文档对象模型)是一种用于表示和操作HTML或XML文档的编程接口。DOM将整个文档建模为一个由节点和对象组成的树结构,使得开发者可以通过JavaScript来访问和修改文档的内容、结构和样式。一、DOM节点DOM节点指的是文档对象模型(DOM......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现七
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现八
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下......
  • Java经典案例代码(持续更新中...)
    2024/11/3目录一、猜数小游戏二、求数组的最大值三、数组反转方法一:方法二:四、随机排名一、猜数小游戏importjava.util.Random;importjava.util.Scanner;publicclassrandom{publicstaticvoidmain(String[]args){Randomr=newRandom(......
  • 最新毕设-SpringBoot-作业管理系统-42854(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    springboot作业管理系统摘  要在信息化社会中,人们需要针对性的信息获取途径。然而,由于不同角度和偏好的存在,人们经常只能获得特定类型的信息,这也是技术攻克难题之一。为了解决作业管理系统等问题,本研究通过分析和研究,设计开发了作业管理系统。作业管理系统主要功能模块包......
  • JavaScript的迭代器和生成器
    1.迭代器Iterator1. 基本概念JavaScript表示集合的对象大致有Object,Array,Map,Set四种,并且这四种类型的数据之间可以相互以成员嵌套(如Array的成员可以是Object,而Map又可以嵌入Object的成员中),为了处理所有不同的数据结构,就需要统一的接口机制。迭代器(Iterator)就是这样一种......
  • 【最新原创毕设】基于SSM的体育赛事管理系统+74454(免费领源码)可做计算机毕业设计JAVA
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2平台分析2.1可行性分析2.1.1技术可行性2.1.2经济可行性2.1.3操作可行性2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分析2.4业务流程分析2.5本章小......
  • 后端java——如何为你的网页设置一个验证码
    本文通过HUTOOL实现:Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/1、工具的准备如果我们通过hutool来实现这个功能,我们需要提前安装hutool的jar包。下载地址:CentralRepository:cn/hutool/hutool-all/5.8.16 将下载好的jar包放到eclipse的lib目录,我们proje......
  • Java 23 的12 个新特性!!
    Java23来啦!和Java22一样,这也是一个非LTS(长期支持)版本,Oracle仅提供六个月的支持。下一个长期支持版是Java25,预计明年9月份发布。Java23一共有12个新特性!有同学表示,Java8还没学完呢,又要学新特性?人麻了啊。。。别担心,其实改动并不大!我抽时间认真看了一下新......