java堆溢出:
java堆是用于存储对象实例的,只要不断创建对象,并且不会被回收,那么在对象数量都达最大堆的容量限制后就会产生内存溢出异常。
虚拟机栈和本地方法栈溢出:
HotSpot虚拟机不区分两种栈。
如果线程请求的栈深度大于虚拟机所允许的最大深度,报StackOverflowError异常。
如果虚拟机在扩展栈时无法申请到足够的内存空间,报OutOfMemoryError异常。
当栈空间无法继续分配时,到底是内存太小还是已用的栈空间太大,本质只是对同一件事情的两种描述而已。
方法区和运行时常量池溢出:
String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。
方法区用于存放Class的相关信息,如类名,访问修饰符,常量池,字段描述,方法描述等。