Java8移除永久代
起因:
最近看深入理解Java虚拟机, 在实战OutOfMemoryError的运行时常量池溢出时, 我的Intellij提示如下:
Java HotSpot(TM) 64-Bit...MaxPermSize=10M; support was removed in 8.0
原书没有说会出现这个警告, 所以上网详细查下相关资料, 汇总如下
探究
在JDK1.7中, 已经把原本放在永久代的字符串常量池移出...我们通常使用PermSize和MaxPermSize设置永久代的大小, 这个大小就决定了永久代的上限, 但是我们不是总是知道应该设置为多大的, 如果使用默认值容易遇到OOM错误....文中说实现目标:
类的元数据, 字符串池, 类的静态变量将会从永久代移除, 放入Java heap或者native memory....其中建议JVM的实现中将类的元数据放入 native memory, 将字符串池和类的静态变量放入java堆中.