Java异常与C++异常

Thu*_*ltz 9 c++ java exception

存储例外的地方?堆栈,堆.如何为例外分配和取消分配内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象?

Thi*_*ilo 7

我假设异常的内存分配方式与所有其他对象(在堆上)的分配方式相同.

这曾经是一个问题,因为那时你无法为OutOfMemoryError分配内存,这就是为什么在Java 1.6之前没有堆栈跟踪的原因.现在他们也为堆栈跟踪预先分配空间.

如果您想知道在抛出异常对异常的引用存储的位置,JVM会在内部保留引用,同时解除调用堆栈以找到异常处理程序,然后异常处理程序获取引用(在其堆栈框架上,就像任何引用一样)其他局部变量).

不能同时抛出两个异常(在同一个线程上).它们可以嵌套,但是只有一个"活动"异常,并且引用了嵌套异常.

当对异常的所有引用都消失时(例如,在异常处理程序完成之后),异常会像其他所有内容一样被垃圾收集.