面试官:JVM为什么用元空间代替永久代?


程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


JVM用元空间代替永久代原因:

  • 降低OOM风险

永久代的最大容量通过参数PermSize 和 MaxPermSize 设置的大小来决定,而程序运行时需要加载多少类又无法确定,所以无法准确的设置这两个参数的大小,设置过小会频繁的触发 FullGC 和导致OOM(内存溢出),而元空间使用的是直接内存,受系统内存的限制,虽然元空间也可能溢出,但是比永久代出现的几率会更小。使用-XX:MaxMetaspaceSize 设置最大元空间大小,默认值为unlimited,即只受系统内存的限制。

  • 优化垃圾回收

永久代的对象是通过FullGC进行垃圾回收,和老年代同时实现垃圾回收。替换元空间以后,简化了Full GC,可以在不进行暂停的情况下并发地释放类数据,同时也提升了GC的性能。

  • 消除合并障碍

在 JDK8合并 HotSpot 和 JRockit 的代码时, JRockit 从来没有永久代, 合并之后也就没有必要考虑永久代了。

  • 性能优化

元空间的实现采用了更高效的数据结构和算法,例如使用指针碰撞(Bump the Pointer)的方式分配内存,减少内存碎片化,提高内存分配的效率。


 系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


 

你可能感兴趣的:(面试干货,jvm)