gpt4 book ai didi

内存中异常的 Java 大小

转载 作者:IT王子 更新时间:2023-10-28 23:31:53 25 4
gpt4 key购买 nike

有谁知道异常一旦被创建和抛出占用多少内存?

例如,NullPointerException

以及异常是如何被垃圾回收的?

最佳答案

Does anyone know how much memory an Exception occupies once it is created and thrown?

这完全取决于异常(exception)情况。像任何其他对象一样,它包含可变数量的数据;如果有人做了一些愚蠢的事情,String 消息可能是 4MB:

Exception e = 
new Exception(new String("Some gigantic message ... lalalalalalalalla"));

(编辑: 好的,这有点误导;异常包含对 String 的引用,并且引用值是固定大小,但 String 本身可能只被异常引用 - 我将其更改为非文字以明确显示它可能是可收集的东西。自定义异常可以包含任何东西,它是一个像任何其他对象一样的对象。此外,这取决于它被抛出了多远,因为它在其中保存了堆栈跟踪。SO 上有一个很好的 Q/A;In java, what is the best way to determine the size of an object 涵盖了这一点。)

And how exceptions are being garbage collected?

就像任何其他对象一样。异常被抛出调用堆栈并发生以下两种情况之一:

1) 你捕获它,它被分配给 catch block 中的一个变量:

catch (Exception e) {

e 现在保存对异常的唯一引用。当不再存在对它的引用时(即它超出了 catch block 底部的范围,或者您传递给它的对象被收集等),它将被收集。

2) 你没有捕获它,它到达了当前线程的调用堆栈的顶部。此时异常超出范围,因此将被收集,并且线程当然会停止。

** 当我说“将被收集”时完全迂腐,我的意思是最终因为当 Java 中的对象不再引用它时,它是 符合条件的收集,GC 处理它。

关于内存中异常的 Java 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com