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

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

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

在这里插入图片描述

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

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

相关文章

nysm:一款针对红队审计的隐蔽型后渗透安全测试容器

关于nysm nysm是一款针对红队审计的隐蔽型后渗透安全测试容器,该工具主要针对的是eBPF,能够帮助广大红队研究人员在后渗透测试场景下保持eBPF的隐蔽性。 功能特性 随着基于eBPF的安全工具越来越受社区欢迎,nysm也应运而生。该工具能保持各种…

简单线程池的实现

线程池的代码可以写的很复杂,这里就稍微简单一些 首先来看一下线程池的原则,下面的大框是服务器,而在服务器中维护一个任务队列。 然后在server中预先创建一批线程,这批线程和任务队列合在一起只用向外界提供一个入队列的接口。 …

【php程序开发从入门到精通】——搭建PHP开发环境

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

搜索与图论——Floyd算法求最短路

floyd算法用来求多源汇最短路 用邻接矩阵来存所有的边 时间复杂度O(n^3) #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N 20010,INF 1e9;int n,m,k; int g[N][N];void floyd(){for(int k 1;k < n;k ){f…

计算机网络(第八版)-第1章课后习题参考答案

计算机网络(第八版)-第1章课后习题参考答案 本文是对自己之前文章的格式化&#xff1a;https://blog.csdn.net/qq_46396470/article/details/132788972?spm1001.2014.3001.5502 T1-01 计算机网络向用户可以提供哪些服务&#xff1f; 连通性和共享 &#xff0c;例如音频&…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现接口资源鉴权

紧接上一篇文章&#xff0c;基于Spring Boot 3 Spring Security6 JWT Redis实现接口资源鉴权 系列文章指路&#x1f449; 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 项目源码&#x1f449; /shijizhe/boot-test 文章目录 1. 修改 UserDetailsServic…

(学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

在ubuntu上搭建系统监控系统

大纲 数据生产方安装和运行验证 数据收集、存储和分发方下载和解压修改配置运行验证 数据消费方下载和运行验证新增数据源新增看板关联看板和数据源效果展现 参考资料 在一个监控系统中&#xff0c;一定会有“数据生产方”和“数据消费方”存在。“数据生产方”用于产出需要监控…

三个表的联合查询的场景分析-场景4:c表维护a和b表的id关联关系(一对多)

基础SQL演练&#xff0c;带详细分析&#xff0c;笔记和备忘。 目录 背景介绍 表数据 需求1&#xff1a;查询g表所有记录&#xff0c;以及关联的h的id 需求2&#xff1a;在需求1基础上&#xff0c;查出关联的h的其它字段&#xff08;name&#xff09; 需求3&#xff1a;在需…

Java基本语法(变量,数据类型,关键字、)

目录 什么是变量 声明 声明方式 赋值方式 声明的同时进行赋值 变量命名规范 字符组成&#xff1a;变量名可以包含以下字符&#xff1a; 开头限制&#xff1a; 空格禁止&#xff1a; 关键字/保留字&#xff1a; 大小写敏感&#xff1a; 长度限制&#xff1a; 推荐风…

软考101-上午题-【信息安全】-网络安全

一、网络安全 1-1、安全协议 SSL(Secure Socket Layer&#xff0c;安全套接层)是 Netscape 于 1994年开发的传输层安全协议&#xff0c;用于实现 Web 安全通信。1996 年发布的 SSL3.0 协议草案已经成为一个事实上的Web 安全标准。 端口号是43。 SSL HTTP HTTPS TLS(Transpo…

FL Studio21中文版百度云网盘下载及切换中文语言教程

FL Studio 21&#xff0c;即广为人知的“水果”软件&#xff0c;拥有众多强大的功能&#xff0c;满足了音乐制作人在创作过程中的各种需求。 首先&#xff0c;它具备出色的多轨道音频录制功能&#xff0c;能够同时处理多个音频轨道的录制&#xff0c;非常适合制作复杂的音乐作…

K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(中)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 在上一章节中&#xff0c;我们详细探讨了Pod的亲和性&…

基于 StarRocks 的风控实时特征探索和实践

背景 金融风控特征是在金融领域中用于评估和管理风险的关键指标。它们帮助金融机构识别潜在风险&#xff0c;降低损失&#xff0c;并采取措施规避风险。例如&#xff0c;用户最后一次授信提交时间就是一个重要的金融风控特征。 金融风控实时特征场景是一个典型的大数据实时业务…

代码随想录算法训练营 DAY 24 | 回溯理论基础 77.组合 + 剪枝优化

回溯理论 回溯法就是递归函数&#xff0c;纯暴力搜索 解决的问题 组合&#xff08;无顺序&#xff09; 1 2 3 4 给出大小为2的所有组合 切割字符串 子集问题 1 2 3 4&#xff0c;子集有1 2 3 4,12,13,14&#xff0c;…123 124… 排列&#xff08;有顺序&#xff09; 棋盘…

OpenAI发布Voice Engine模型!用AI合成你的声音!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

合集:JS异步的六个解决方案详解。

Hello&#xff0c;各位老铁&#xff0c;最近发表了js异步的解决方案&#xff0c;是分开发的&#xff0c;这次我把他汇总起来&#xff0c;方便大家收藏、查看&#xff0c;欢迎点赞评论私信交流。 01.详解&#xff1a;JS异步解决方案之回调函数&#xff0c;及其弊端 02.详解&…

函数指针的运用

这段代码使用了函数指针&#xff0c;实现了根据用户输入的命令选择不同的操作&#xff0c;并对两个数进行相应的处理。以下是代码的总结&#xff1a; getMax, getSmall 和 getSum 函数分别用于获取两个数中的较大值、较小值和它们的和。 dataHandler 函数接收两个数据 data 和…

ElementUI表格table组件实现单选及禁用默认选中效果

在使用ElementUI&#xff0c;需要ElementUI表格table组件实现单选及禁用默认选中效果, 先看下效果图&#xff1a; 代码如下&#xff1a; <template><el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"widt…