共计 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 带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!