要点在哪 面试时刻总青睐问的 JVM

  • 电脑网络维修
  • 2024-11-15

面试的时刻,很多面试官问 JVM 的时刻,咱们作为一个开发者,很多时刻很难 Get 到面试官提问的要点,由于 JVM确实太多了,从程序计数器开局,而后堆,而后栈,然而面试的时刻却总是回答不好这个疑问,很多状况就是没有系统的去看过所以回答面试题的时刻,会出现语无伦次,这一块内容,那边一块内容,总是回答不好,几天阿粉就来分享给大家一个JVM 的面试教程,对你有用的话,点赞关注和收藏一波。

你对 JVM 了解么?

首先,问这个疑问的,普通都是问完了一些基础了,这时刻须要你自己从头开局说 JVM了,很多人实践上想到就是渣滓回收机制,确实,没错,然而,假设你间接就开局说是不是渣滓回收机制的时刻,就曾经有点答非所问了。

为什么这么说,由于 JVM 的渣滓回收机制,都是出当初 堆内存 的,然而,JVM 的划分可不是只需堆内存的,这时刻回答应该怎样回答?

** JVM 的外部结构,最关键的外部结构是什么!**

JVM 分红了两个局部

1.线程共享区域

2.线程私有区域

线程共享区域蕴含:堆(Heap)、方法区

线程私有区域蕴含:程序计数器、虚构机栈(Stack)、本中央法栈

由于 JVM ,那可是不单单只要 堆(Heap) 的存在呀,其余的存在也是无法缺少的,为什么阿粉要这么说呢?

由于有些面试官会问 JVM 的类加载机制 你了解么?

假设你只是了解了渣滓回收机制的话,那你这个疑问,是不是有点麻了,有点懵了,这不就芭比Q 了么?

那么 JVM 的类加载机制 是个什么呢?

回答:

首先经过类加载器(ClassLoader)会把 .class字节码文件加载到内存中——运转时数据区(Runtime>

而后在Enden用完的时刻外面会出现待回收的

而后就来了把存活的对象复制放到Survior1(from)中,待回收的等候给他回收掉 就是这样的

而后把Enden区清空回收掉

这样的话 第一次性GC就成功了,上方再往下走

当Enden充溢的时刻就会再次GC

先是这个样子的

而后会把 Enden和Survoir1中的内容复制到Survior中,

而后就会把Enden和Survior启动回收

而后从Enden中过去的就相当于次数少的,而从Survior1中过去的就相当于移动了2次

这样重生代的GC就口头了2次了,

当Enden再次被经常使用成功的时刻,就会从Survior2复制到Survior1中,

接上去是连图

经过回收之后Surior1就变了,1对象是从Enden间接复制上来的,2对象是Enden-->Survior2-->Survior1,3对象则是从Enden-->Surivior1-->Survior2-->Survior1复制上来的,这样一步一步的口头下去的时刻,就是重生代的GC。

这就是重生代驳回的 GC,假设你须要给面试官解释,那么你就得熟练的记住这个图,为什么这么说,由于只要你掌握了这个图,那么你相对会把这个复制算法给面试官讲述的明明白白。

既然咱们都知道了这个复制算法了,那么他究竟有什么缺陷呢?

然而咱们也得吹一下复制算法的牛逼的中央呀。

吞吐量高所谓吞吐量就是搜查优惠对象的时期比上搜查堆时期,越高说明你的有效搜查占比越高,不美观出,咱们都是从根开局,搜查的所有是优惠对象,并没有糜费时期去搜查渣滓对象。这个好处在堆越大的场景下越显著。

没有碎片

在将优惠对象复制到To空间时,他们都是紧挨着的,而后清空From时所有清空,齐全没有碎片的或许。

这也是重生代经常使用的渣滓回收的算法。

JVM 的老年代(渣滓回收机制)

老年代的渣滓回收机制,驳回的则是和重生代不一样的模式,有些人称之为FullGC,而FullGC出现的要素则是:在重生代假设说存在的对象或许说新创立进去的对象由于某些要素须要移动到老年代中,然而老年代中压根就没有这么大的内存空间去容纳这个对象,那么就会引发一次性FullGC,假设在口头完FullGC之后,还是没有方法给这些对象调配内存,那么凉了,该抛出意外了,意外类型就是OutOfMemoryError。

而FullGC经常使用的是和MinorGC不一样的算法,它经常使用的是标志肃清算法,听名字,挺好了解的,来波图示解析一波。深化了解JVM一书中的图示是这个样子的,

图示是不是看着也挺明白,先标志,而后在删除。

在了解了这个之后,咱们还得说一个概念,那就是GC Root,Root咱们可以了解成一个根节点就像这个样子

上图中的a,b,c,d,就是活着的对象,假设说存在这援用,比如说b援用的a,那么a他就是属于活着的对象。当咱们老年代内存区中的有效的内存空间不够的时刻,那么这时刻整个环球都要宁静上去了(stopthe world),这时刻就要开局预备启动渣滓回收了。

流程图就像这个样子的 初始下的老年代中的对象形态

这时刻都是没有被标志的形态,接上去内存不够,GC线程中止,开局启动标志了

依照根节点开局遍历 标志的abcdeh都是存活的对象,接上去开局标志。

接上去就是肃清数据了

清楚成功之后还有就是把标志去除掉,可以下次启动标志肃清的时刻继续肃清

其实这个阿粉的老读者必需看过,由于很早之前阿粉就画出过这个图。

这样标志肃清就口头终了了。

这时刻不吹不黑,必需会有优缺陷,不然为啥不驳回其余的方法呢?毕竟 JVM 必需是会选用最适宜自己的模式来启动 GC 的。

缺陷肃清后的堆内存由于空间不延续,即内存碎片化,若下一次性须要调配对象的内存大于碎片空间,这样会提早触发GC,当提早触发的GC回收后,空间还是无余就会出现OOM等失误。

时期疑问:由于分为两个环节(标志、肃清),当堆内可回收对象较多时,该算法须要启动少量的标志与肃清,这里就发生一个疑问,随着可回收对象的的增多,标志和肃清的效率就会降低;再者由于空间不延续造成每次再次调配都要遍历闲暇列表。

有点

成功繁难,与激进式GC算法兼容 这阿粉真的说不上他其余的好处了,除了能够处置援用计数算法带来的不能肃清循环援用的疑问外,阿粉真实不知道了。

关于 JVM 的常识要点,你学会了么?

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/9226.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号