关于java:金九银十必问Java面试题工作六年面试被问JVM为什么使用元空间替换了永久代

5次阅读

共计 1069 个字符,预计需要花费 3 分钟才能阅读完成。

“JVM 为什么应用元空间替换了永恒代?”

这是一个工作 6 年的同学去字节第一面遇到的问题,很遗憾,他没有答复进去

大家好,我是 Mic,一个工作了 14 年的 Java 程序员。

对于这个问题,咱们怎么答复?面试官到底关注什么呢?

面试解析

咱们都晓得 Java8 以及当前的版本中,JVM 运行时数据区的构造都在缓缓调整和优化。

但实际上这些变动,对于业务开发的小伙伴来说,没有任何影响。

因而我能够说,99% 的人都答复不出这个问题。

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

  • 既能够考查求职者对 JVM 原理的了解水平
  • 又可能考查求职者基本功的扎实水平
  • 还能实现高级人才的筛选

在 Java7 外面,JVM 运行时数据区是这样的。

在 Hotspot 虚拟机中,办法区的实现是在永恒代外面,它外面次要存储运行时常量池、Klass 类元信息等。

永恒代属于 JVM 运行时内存中的一块存储空间,咱们能够通过 -XX:PermSize 来设置永恒代的大小。

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

在 JDK1.8 外面,JVM 运行时数据区是这样的。

在 Hotspot 虚拟机中,勾销了永恒代,由元空间来实现办法区的数据存储。

元空间不属于 JVM 内存,而是间接应用本地内存,因而不须要思考 GC 问题。

默认状况下元空间是能够无限度的应用本地内存的,然而咱们也能够应用 JVM 参数来限度内存应用大小。

为什么要应用元空间来替换永恒代,背地必然有它的情理,然而如果求职者可能答复进去。

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

咱们来看看高手的答复。

高手:

有三个方面的起因:

  • 在 1.7 版本外面,永恒代内存是有下限的,尽管咱们能够通过参数来设置,然而 JVM 加载的 class 总数、大小是很难确定的。

    所以很容易呈现 OOM 问题。

    然而元空间是存储在本地内存外面,内存下限比拟大,能够很好的防止这个问题。

  • 永恒代的对象是通过 FullGC 进行垃圾收集,也就是和老年代同时实现垃圾收集。

    替换成元空间当前,简化了 Full GC。能够在不进行暂停的状况下并发地开释类数据,同时也晋升了 GC 的性能

  • Oracle 要合并 Hotspot 和 JRockit 的代码,而 JRockit 没有永恒代。

以上就是我对这个问题的了解。

总结

好了,明天的分享就到这里完结了。

如果喜爱我的作品,记得点赞、珍藏、关注!!!

须要金九银十 Java 面试题材料扫下方

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

正文完
 0