最近正好在研究这个问题,题主问题本身是有问题的,在JDK7中HotSpot的常量池是放在Java Heap中,并非题目中的native memory中。在JDK6中是放在Perm Space。题主可以用JDK6和JDK7分别试一下。
说一下题主的那段代码,要一分为二,JDK6/JDK7及以上
JDK6:
上面也说了,JDK6的字符串常量是存在Perm Space中,所以把Perm Space 设的小一点-(XX:MaxPermSize=10M)可以很快抛异常,具体的异常就是“java.lang.OutOfMemoryError: PermGen space”。
JDK7及以上:
JDK7的字符串常量池是放在Java Heap区,所以只要设置“-Xms64m -Xmx64m”就很快会抛异常,异常肯定是“java.lang.OutOfMemoryError: Java heap space

作者:百恼
链接:https://www.zhihu.com/question/29352626/answer/67242227
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

05-11 20:36