程序员的公众号:源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)的方式分配内存,减少内存碎片化,提高内存分配的效率。
?
?