大厂面试题-JVM为什么使用元空间替换了永久代?

目录

面试解析

问题答案


面试解

我们都知道Java8以及以后的本中,JVM运行时数据区的结构都在慢慢调整和优化。但实上这些变化,对于业务开发的小伙伴来说,没有任何影响。

因此我可以说,99%的人都回答不出这个问题。

但是互联网大厂的面试就是筛选那1%的优秀人才,因此通过这道题

    1、既可以考察求职者对JVM原理的理解程度

    2、又能够考察求职者基本功的扎实程度

    3、还能实现高级人才的筛

在Java7里面,JVM运行时数据区是这样的(如图)。

Hotspot虚拟机中,方法区的实现是在永久代里面,它里面主要存储运行时常量池、Klass类元息等。

永久代属于JVM运行时内存中的一块储空间,我们可以通过-XX:PermSize来设置永久代的大小。

存不够的时候,会触发垃圾回收。

JDK1.8面,JVM运行时数据区是这样的(如图)

Hotspot虚拟机中,取消了永久代,由元空间来实现方法区的数据存储。

元空不属于JVM内存,而是直接使用本地内存,因此不需要考虑GC问题。

默认情下元空间是可以无限制的使用本地内存的,但是我们也可以使用JVM参数来限制内存使用大小。

为什么要使用元空间来替换永久代,背后必然有它的道理,但是如果求职者能够回答出来。

必然对于JVM底层原理是有一定了解的。

题答案

有三个方面的原因:

    1、在1.7版本里面,永久代内存是有上限的,虽然我们可以通过参数来设置,但是JVM加载的class总数、大小是很难确定的。所以很容易出现OOM问题。

是元空间是存储在本地内存里面,内存上限比较大,可以很好的避免这个问题。

    2、永久代的对象是通过FullGC进行垃圾收集,也就是和老年代同时实现垃圾收集。替换成元空间以后,简化了Full GC。可以在不进行暂停的情况下并发地释放类数据,同时也提升了GC的性能

    3、Oracle要合并Hotspot和JRockit的代码,而JRockit没有永久代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/111449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享8个分布式Kafka的使用场景

Kafka 最初是为海量日志处理而构建的。它保留消息直到过期,并让消费者按照自己的节奏提取消息。与它的前辈不同,Kafka 不仅仅是一个消息队列,它还是一个适用于各种情况的开源事件流平台。 1. 日志处理与分析 下图显示了典型的 ELK&#xff0…

♥ uniapp 环境搭建

♥ uniapp 环境搭建 开发uniapp需要用到的工具有两个: 1、用到的平台和地址: 需要了解的几个平台以及地址: (1)微信公众平台 https://mp.weixin.qq.com/ (2)微信开发文档 https://develo…

代码随想录day50|198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 (中等) leetcode题目链接:198. 打家劫舍 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com) 视频讲解:动态规划,偷不偷这个房间呢?| LeetCode…

Android 13 Handler详解

1.Handler 简介 Handler 是一套 Android 消息传递机制。在多线程应用场景中,将子线程中需要更新 UI 的操作消息,传递到 UI 主线程,从而实现子线程通知 UI 更新最终实现异步消息处理。说白了是用于线程之间的通信。 Handler主要有4个重要类&a…

点云配准--对称式ICP

对称式ICP 写在前面的话 针对于局部平面不完美的情况,提出了一种对称式ICP目标函数,相较于传统的ICP方法,增大了收敛域,提高了收敛速度。论文理论说明不甚清楚,实验较少,但代码开源。 理论 对称目标函数…

提高微星笔记本Linux下散热性能,MSI-EC 驱动新补丁发布

导读近日消息,今年早些时候,Linux 6.4 中添加了 MSI-EC 驱动程序,允许对 Linux 系统微星笔记本电脑进行更多控制。 MSI-EC 驱动程序近日迎来新补丁,为微星笔记本带来 Cooler Boost 功能。该功能允许提高笔记本电脑的风扇转速&…

洞见UI自动化测试

随着软件行业的不断发展,建立一个完善的自动化测试体系变得至关重要。自动化测试包括三个方面:UI前端界面,Service服务契约和Unit底层单元如下图: 越是底层的测试,运行速度越快,时间开销越少,金…

设计模式——单例模式详解

目录 设计模式类型单例模式单例模式方式饿汉式静态常量方式静态代码块形式 懒汉式线程不安全(不推荐)懒汉式优化(不推荐) 双重检查(推荐方式)静态内部类(推荐方式)枚举方式&#xff…

Docker(1)——安装Docker以及配置阿里云镜像加速

目录 一、简介 二、安装Docker 1. 访问Docker官网 2. 卸载旧版本Dokcer 3. 下载yum-utils(yum工具包集合) 4. 设置国内镜像仓库 5. 更新yum软件包索引 6. 安装Docker 7. 启动Docker 8. 卸载Docker 三、阿里云镜像加速 1. 访问阿里云官网 2. …

containerd-rootless安装

实验环境:centos7.7.1908 参考文档: containerd (nerdctl) 依赖项 |无根容器 (rootlesscontaine.rs) [CentOS 7] 无法安装 containerd-rootless-setuptool.sh ([ERROR] 需要 systemd (systemctl --user&…

可直接在Maya实时表情捕捉的面捕头盔,为3D模型表情制作提速!

面捕表情捕捉头盔可以用于捕捉真人的面部表情,从微小的皱纹到大的脸部肌肉运动,通过面捕头盔,都可以实时转化到虚拟角色上。 在元宇宙浪潮下,围绕虚拟人的应用场景和时长变得愈加多元,人们对虚拟人的精度不再仅限于简…

AI机器人对话直播软件系统 带完整的搭建教程

AI机器人对话直播软件系统是一种基于人工智能技术的实时语音交互系统,具有自然语言处理、语音识别、语音合成等功能。该系统能够实现人与机器之间的智能对话,为企业提供更高效、更便捷的客户服务,同时还能为教育、娱乐等领域提供全新的互动体…

【Qt之QLocale】使用

描述 QLocale类可以在多种语言之间进行数字和字符串的转换。 QLocale类在构造函数中使用语言/国家对进行初始化,并提供类似于QString中的数字转字符串和字符串转数字的转换函数。 示例: QLocale egyptian(QLocale::Arabic, QLocale::Egypt);QString s1 …

淘宝价格监控-电商数据采集分析

一、什么是淘宝商品数据采集? 淘宝商品数据采集,顾名思义,就是通过技术手段对全网电商平台上的商品价格信息进行抓取并保存。通过将收集到的这些价格信息进行分析处理后得到该商品的成交价、折扣率等关键属性指标,从而为卖家提供…

从零开始的目标检测和关键点检测(一):用labelme标注数据集

从零开始的目标检测和关键点检测(一):用labelme标注数据集 1、可视化标注结果2、划分数据集3、Lableme2COCO,将json文件转换为MS COCO格式 前言:前段时间用到了mmlab的mmdetction和mmpose,因此以一个小的数…

Thread

Thread 线程启动线程第一种创建线程线程的第二种创建方式使用匿名内部类完成线程的两种创建 Thread API线程的优先级线程提供的静态方法守护线程用户线程和守护线程的区别体现在进程结束时 多线并发安全问题同步块 线程 启动线程 启动线程:调用线程的start方法,而不是直接调用…

用LibreOffice在excel中画折线图

数据表格如下。假设想以x列为横坐标,y1和y2列分别为纵坐标画折线图。 选择插入-》图表: 选择折线图-》点和线,然后点击“下一步”: 选择:列中包含数据序列,然后点击完成(因为图挡住了数据…

MySQL系列-架构体系、日志、事务

MySQL架构 server 层 :层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现&am…

Qt 项目实战 | 俄罗斯方块

Qt 项目实战 | 俄罗斯方块 Qt 项目实战 | 俄罗斯方块游戏架构实现游戏逻辑游戏流程实现基本游戏功能设计小方块设计方块组添加游戏场景添加主函数 测试踩坑点1:rotate 失效踩坑点2:items 方法报错踩坑点3:setCodecForTr 失效踩坑点4&#xff…