StackOverflowError 和 OutOfMemoryError 之间有什么区别以及如何在应用程序中避免它们?
简短回答:
-
OutOfMemoryError
与堆有关。
-
StackOverflowError
和栈有关
长答案:
你几时开始JVM
您可以定义它可以使用多少 RAM 来进行处理。JVM
出于处理目的将其划分为某些内存位置,其中两个是Stack
& Heap
如果内存中有大对象(或)引用的对象,那么您将看到OutofMemoryError
。如果对对象有强引用,则 GC 无法清理为该对象分配的内存空间。当 JVM 尝试为新对象分配内存但没有足够的可用空间时,它会抛出异常OutofMemoryError
因为它无法分配所需的内存量。
如何避免:确保不需要的对象可供GC使用
所有与局部变量和方法调用相关的数据都将位于堆栈上。对于每个方法调用,都会创建一个堆栈帧,并且本地以及与方法调用相关的数据将放置在堆栈帧内。一旦方法执行完成,堆栈帧将被删除。重现此问题的一种方法是,对方法调用有一个无限循环,您将看到stackoverflow
错误,因为每次调用时堆栈帧都会填充方法数据,但不会被释放(删除)。
如何避免:确保方法调用正在结束(不是无限循环)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)