java堆溢出:在对象数量到达最大堆的容量限制后就会产生内存溢出异常。
虚拟机栈溢出/本地方法栈溢出:请求栈的深度达到虚拟机所允许的最大深度,抛出StackOverError异常。在扩展栈时候无法申请到足够的内存空间则抛出,OutOfMemoryError异常。在单线程情况下,这两种情况只能抛出StackOverError异常。
方法区溢出+常量池溢出:String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串中的String对象,否则将这个字符串的引用加入常量池中,返回String对象的引用。
在JDK1.6中,intern()方法会将首次遇见的字符串实例复制到永久代中,返回的也是永久代中的这个字符串的引用,而由StringBuilder创建的字符串实例在java堆上,必然不是同一个引用,而1.7之后intern()方法会将首次遇见的字符串的引用在常量池中记录,所以和StringBuilder是同一个引用。
本机内存直接溢出:等看第二遍再写。