java运行时数据区域-----java堆溢出+虚拟机栈溢出/本地方法栈溢出+方法区溢出+常量池溢出+本机内存直接溢出

java堆溢出:在对象数量到达最大堆的容量限制后就会产生内存溢出异常。

虚拟机栈溢出/本地方法栈溢出:请求栈的深度达到虚拟机所允许的最大深度,抛出StackOverError异常。在扩展栈时候无法申请到足够的内存空间则抛出,OutOfMemoryError异常。在单线程情况下,这两种情况只能抛出StackOverError异常。

方法区溢出+常量池溢出:String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串中的String对象,否则将这个字符串的引用加入常量池中,返回String对象的引用。

在JDK1.6中,intern()方法会将首次遇见的字符串实例复制到永久代中,返回的也是永久代中的这个字符串的引用,而由StringBuilder创建的字符串实例在java堆上,必然不是同一个引用,而1.7之后intern()方法会将首次遇见的字符串的引用在常量池中记录,所以和StringBuilder是同一个引用。

本机内存直接溢出:等看第二遍再写。



猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80244611