简短答案:
OutOfMemoryError
与堆有关。StackOverflowError
与堆栈有关
长答案:
当您开始时
JVM,定义它可以使用多少RAM进行处理。
JVM出于处理目的将其划分为某些内存位置,其中两个是
Stack&
Heap
如果内存中有大对象(或被引用的对象),则会看到
OutofMemoryError。如果您对对象有很强的引用,则GC无法清理为该对象分配的内存空间。当JVM尝试为新对象分配内存而没有足够的可用空间时,它会抛出异常,
OutofMemoryError因为它无法分配所需的内存量。
避免方法 :确保不必要的对象可用于GC
您所有与变量有关的局部变量和方法调用数据都将放在堆栈中。对于每个方法调用,将创建一个堆栈框架,并将本地以及与方法调用相关的数据放置在堆栈框架中。一旦方法执行完成,堆栈框架将被删除。重现此问题的一种方法是,对方法调用进行无限循环,您会看到
stackoverflow错误,因为每次调用时都将使用方法数据填充堆栈框架,但不会释放(删除)堆栈框架。
避免 方法:确保方法调用结束(不是无限循环)



