JVM在JDK8取消了永久代(PermGen)代之元空间(Metaspace)的意义

时间:2020-12-31 17:18:39

最直接的后果,就是以后再也不会有outofmemoryerror permgen space这个错误了!

最根本的好处就是在效率提升的同时增加了安全性。相对于C++来说,Java语言更加安全,jvm具有自动的垃圾回收机制,而C++的程序员需要手动去清除垃圾。JVM这种设计思路确实使java语言的安全性提高了,并且不需要程序员手动去清理垃圾,但是带来了时间上的开销,也就导致了java语言效率低,速度相对慢。大部分实时系统比如股票实时显示系统智能用C或者C++来做,根本不能用java。基于jvm最初的设计,为了能在保证安全性的同时还能提高效率,最好的方式就是减少垃圾的产生,关闭String池就是从JDK7到JDK8的一个过渡,还有一些方式,总知思路就是减少产生垃圾的空间。

permSize:原来的jar包及你自己项目的class存放的内存空间,这部分空间是固定的,启动参数里面-permSize确定,如果你的jar包很多,经常会遇到permSize溢出,且每个项目都会占用自己的permGen空间
改成metaSpaces,各个项目会共享同样的class内存空间,比如两个项目都用了fast-json开源包,在mentaSpaces里面只存一份class,提高内存利用率,且更利于垃圾回收