金三银四面试题(七):JVM常见面试题(1)

news2024/11/25 7:08:42

JVM会有许多零碎但是却很高频的基础考题。牢记这些,才能保证不在面试中落后于人。

说说对象分配规则

这也是之前面试腾讯时候被问到的问题:请介绍JVM如何分配对象?

  • 对象优先分配在Eden 区,如果Eden 区没有足够的空间时,虚拟机执行一次Minor GC。
  • 大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避
    免在Eden 区和两个Survivor 区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
  • 长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1
    次Minor GC 那么对象会进入Survivor 区,之后每经过一次Minor GC 那么对象的年龄加1,
    直到达到阈值对象进入老年区。
  • 动态判断对象的年龄。如果Survivor 区中相同年龄的所有对象大小的总和大于Survivor
    空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。
  • 空间分配担保。每次进行Minor GC 时,JVM 会计算Survivor 区移至老年区的对象的平均
    大小, 如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查
    HandlePromotionFailure 设置,如果true 则只进行Monitor GC,如果false 则进行Full GC。

说说堆和栈的区别

功能不同

  • 栈是运行时单位,代表着逻辑,用于存储方法调用的调用栈和局部变量,所在区域连续,没有碎片;
  • 堆是存储单位,代表着数据,可被多个栈共享(包括成员中基本数据类型、引用和引用对象),所在区域不连续,会有碎片。

共享性不同

栈内存是线程私有的。堆内存是所有线程共有的。

异常错误不同

如果栈内存或者堆内存不足都会抛出异常。

  • 栈空间不足:java.lang.StackOverFlowError。
  • 堆空间不足:java.lang.OutOfMemoryError。

空间大小

栈的空间大小远远小于堆的。在32位的JVM上,通常默认的栈大小是1MB。而在64位的JVM上,默认的栈大小可能会更大一些,通常是2MB。而在32位系统上,默认的堆大小可能在1GB以下,而在64位系统上可能会在2GB到4GB之间。但是这些值只是一个大致的估计,具体的默认堆大小还是需要查看具体的JVM实现和版本。

JVM的永久代中会发生垃圾回收吗?

永久代不会进行垃圾回收,永久代满了,会触发full gc。众所周知永久代(在JDK 8之前)通常用于存储类的元数据、常量池等信息,而不是存储普通对象,所以永久代的垃圾回收由"永久代垃圾收集器"(如CMS)负责,垃圾回收的主要目标是回收不再使用的类元数据和常量,而不是普通的Java对象。

然而,JDK 8引入了元数据区(Metaspace),用于存储类的元数据,取代了永久代。在元数据区中,垃圾回收由不同的机制处理,通常由G1垃圾收集器或者CMS垃圾收集器负责。

因此,在JDK 8及更新版本中,即使是代替永久代的元数据区,也会进行垃圾回收,但这是针对类的元数据,而不是针对普通对象的。

你知道哪些垃圾收集算法

GC 最基础的算法有三种: 标记-清除算法、复制算法、标记-压缩算法,我们常用的垃圾回收
器一般都采用分散收集算法。

标记-清除算法, “标记-清除”( Mark-Sweep)算法,如它的名字一样,算法分为“标记”
和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记
的对象。

复制算法, “复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每
次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,
然后再把已使用过的内存空间一次清理掉。

标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象
进行
清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

分代收集算法, “分代收集”( Generational Collection)算法,把Java 堆分为新生代和老年
代, 这样就可以根据各个年代的特点采用最适当的收集算法。

总结

本文介绍了四道面试中经常出现的八股文,希望对大家有所帮助。

往期文章

金三银四面试题(一):JVM类加载与垃圾回收

金三银四面试题(二):数据库缓存的数据一致性

金三银四面试题(三):JVM内存模型

金三银四面试题(四):Full GC 和 Minor GC

金三银四面试题(五):JVM之TLAB

金三银四面试题(六):对象大小知多少

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试基础理论、测试用例及设计方法、易混淆概念总结【软件测试】

一.软件测试基础理论 1.软件定义 软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档 的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列; 数据是使程序能正常操作信息的数据结构; 文档是与程序开发、维…

TR2 - Transformer模型的复现

目录 理论知识模型结构结构分解黑盒两大模块块级结构编码器的组成解码器的组成 模型实现多头自注意力块前馈网络块位置编码编码器解码器组合模型最后附上引用部分 模型效果总结与心得体会 理论知识 Transformer是可以用于Seq2Seq任务的一种模型,和Seq2Seq不冲突。 …

开源免费软件推荐PhotoPrism:一款基于TensorFlow的开源照片管理工具,实现自动图像分类与本地化部署

引言: PhotoPrism,这款基于机器学习软件Google TensorFlow的开源照片管理工具,不仅实现了自动图像分类,更能够精准检测图片的颜色、色度、亮度、质量等属性。无论是全景照片还是地理位置信息,它都能轻松识别。更重要的…

k8s-jenkins安装与流水线

k8s-jenkins安装与流水线 一、环境安装1.创建目录2.后台启动服务3.浏览器访问4.修改密码 二、流水线1.新建流水线任务2.运行流水线3.安装插件4.安装Kubernetes CLI 三、总结 一、环境安装 如果使用的是阿里云Kubernetes集群 ,可以安装其 ack-jenkins应用。 5分钟在…

KVM:尝试安装windows2008

最终目的是在lxd部署windows2008镜像 WindowsServer2008镜像: cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso 镜像参考链接: https://discussion.scottibyte.com/t/migrate-a-hyper-v-windows-vir…

on-my-zsh 命令自动补全插件 zsh-autosuggestions 安装和配置

首先 Oh My Zsh 是什么? Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式。它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作。给我们一种全新的方式使用命令行。…

【unity】unity安装及路线图

学习路线图 二、有关unity的下载 由于unity公司是在国外,所以.com版(https://developer.unity.cn/)不一定稳定,学习时推荐从.cn国内版(https://developer.unity.cn/)前往下载,但是后期仍需回…

【全套源码教程】基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现

目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台功能拓展 商品详情单管理 个人中心 秒杀活动 推荐系统 评论与评分系统 后台功能拓…

桌面/WEB端3D开发工具HOOPS SDK简介

Tech Soft 3D在长达25年的时间内,一直通过卓越的3D技术帮助全球超过600家客户推动创新,这些客户包括HEXAGON、SolidWorks、SIEMENS、Aras、ANSYS、AVEVA等各个行业的领军者。 Tech Soft 3D旗下拥有4款原生产品,分别是:HOOPS Excha…

docker-compose mysql

使用docker-compose 部署 MySQL(所有版本通用) 一、拉取MySQL镜像 我这里使用的是MySQL8.0.18,可以自行选择需要的版本。 docker pull mysql:8.0.18二、创建挂载目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /dat…

浏览器工作原理与实践--块级作用域:var缺陷以及为什么要引入let和const

在前面《07 | 变量提升:JavaScript代码是按顺序执行的吗?》这篇文章中,我们已经讲解了JavaScript中变量提升的相关内容,正是由于JavaScript存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是Jav…

【YOLOv5改进系列(8)】高效涨点----添加yolov7中Aux head 辅助训练头

文章目录 🚀🚀🚀前言一、1️⃣ Auxiliary head辅助头简单介绍二、2️⃣从损失函数和标签分配分析三、3️⃣正负样本标签分配四、4️⃣如何添加Aux head辅助训练头五、5️⃣实验部分(后续添加,还是跑模型,辅助头真是太慢…

Chrome 插件各模块使用 Fetch 进行接口请求

Chrome 插件各模块使用 Fetch 进行接口请求 常规网页可以使用 fetch() 或 XMLHttpRequest API 从远程服务器发送和接收数据,但受到同源政策的限制。 内容脚本会代表已注入内容脚本的网页源发起请求,因此内容脚本也受同源政策的约束,插件的来…

Arduino IDE导出esp8266工程编译后的bin文件

一、导出bin文件的方法一 1.通过IDE直接导出,选择 项目 --> 导出已编译的二进制文件,会在工程下生成 build 文件夹,里面有导出的bin文件。 一、导出bin文件的方法二 通过临时文件,找到生成的bin文件。 临时文件的位置&#…

MES系统怎么解决车间生产调度难的问题?

MES系统三个层次 1、MES决定了生产什么,何时生产,也就是说它使公司保证按照订单规定日期交付准确的产品; 2、MES决定谁通过什么方式(流程)生产,即通过优化资源配置,最有效运用资源; …

1500㎡全新展厅升级 无锡冠珠瓷砖旗舰店举行盛大开业典礼

3月23日,无锡冠珠旗舰店重装升级,举行盛大的开业典礼!截止到当天18时,本次开业活动共计成交近300单,收款超300万。新明珠集团董事兼常务副总裁梁旺娟、新明珠集团副总裁兼营销管理中心总经理邓勇、新明珠集团副总经理兼…

翻译 《The Old New Thing》 - Why is a registry file called a “hive“?

Why is a registry file called a “hive“?https://devblogs.microsoft.com/oldnewthing/20030808-00/?p42943 为什么注册表文件被称为‘蜂巢’? Raymond Chen 2003年8月8日 分享一个没用的知识: 话说有一位 Windows NT 的开发者十分讨厌蜜蜂。于是&a…

华清远见STM32U5开发板助力2024嵌入式大赛ST赛道智能可穿戴设备及IOT选题项目开发

第七届(2024)全国大学生嵌入式芯片与系统设计竞赛(以下简称“大赛”)已经拉开帷幕,大赛的报名热潮正席卷而来,高校电子电气类相关专业(电子、信息、计算机、自动化、电气、仪科等)全…

【chemistry 5】糖化学、脂化学和糖代谢

🌞欢迎来到生物化学的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 📆首发时间:🌹2024年3月29日&…

13 Games101 - 笔记 - 光线追踪(Whitted-Style光线追踪原理详解及实现细节)

13 光线追踪(Whitted-Style光线追踪原理详解及实现细节) 引入光线追踪的原因 光栅化的缺点:不能很好的处理全局光照。(因为Blinn-Phong这种局部模型无法处理全局效果!) 光栅化:快 real-time 质量低光线追…