为什么在尝试捕获OOME时OOME会有不同的行为?

学习者

我需要你的一些专家的理解

该程序不会捕获块(因为堆已满,但我想了解原因)

public class OOME_NotCatch {

    static List l = new ArrayList();
    static Long i = new Long(1);

    public static void main(String[] args) {
        try {
            while (true) {
                l.add(i);
                i++;
            }
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            System.out.println("Encountered OutOfMemoryError");
        }
    }
}
//Console : Exception in thread "main" 

但是即使获得了OOME,以下程序仍可以很好地运行:

public class Catch_OOME_Collection {

    static List l = new ArrayList();

    public static void main(String[] args) {
        try {
            while (true) {
                l.add(new byte[1000000]);
                System.out.println("size " + l.size());
            }
        } catch (OutOfMemoryError e) {
            System.out.println("Encountered OutOfMemoryError");
            e.printStackTrace();
            System.out.println("size of list is  " + l.size());
            Iterator i = l.iterator();
            while(i.hasNext()){
                System.out.println(i.next().toString());
                i.remove();
            }
            while (true) {
                System.out.println("keep printing");
            }
        }
    }
}

在看到相同错误OOME的不同结果后,我有些困惑。请指导

尼伯(JB Nizet)

我的理解是,在第一个程序中,尝试分配新的Long对象(仅占用几个字节的内存)时,将引发OOME。这意味着堆已完全充满,并且不再有可用内存来运行catch块。

在第二个程序中,尝试分配100万字节的新数组时,将引发OOME。它失败了,但这可能意味着堆仍然有999,990字节可用,足以让catch块执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来源与 为什么会有不同的行为?

来自分类Dev

当类中的counter较大时,为什么java线程的行为会有所不同?

来自分类Dev

为什么当接口关闭时,ip和ifconfig会有不同的行为?

来自分类Dev

当类在函数内时,为什么类中的全局行为会有所不同?

来自分类Dev

为什么当类型实现接口时,行为会有所不同?

来自分类Dev

为什么在递增计数与递减计数时,for循环的行为会有所不同?

来自分类Dev

为什么更改iframe高度时锚点会有不同的行为?

来自分类Dev

地图与清单;为什么会有不同的行为?

来自分类Dev

为什么会有这种不同的行为?我对吗?

来自分类Dev

为什么当应用程序在后台时本机线程的行为会有所不同?

来自分类Dev

在直接分配或从get-content检索数组时,为什么数组的行为会有所不同

来自分类Dev

将VB.NET代码迁移到C#时,为什么for循环的行为会有所不同?

来自分类Dev

为什么在以“ self”为前缀时,Ruby实例方法调用的行为会有所不同?

来自分类Dev

为什么在使用ICustomTypeDescriptor时TypeDescriptor.GetProperties对于类型和对象的行为会有所不同

来自分类Dev

为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

来自分类Dev

为什么在测试用例中时,此TensorFlow代码的行为会有所不同?

来自分类Dev

为什么使用交叉元运算符时** 2和²的行为会有所不同?

来自分类Dev

当环境将Dev更改为Prod时,为什么此Unzip Shell脚本的行为会有所不同?

来自分类Dev

提供通用类型与直接类型时,为什么Typescript映射元组类型的行为会有所不同?

来自分类Dev

为什么在for循环中更新Python生成器时,其行为会有所不同?

来自分类Dev

为什么会有未捕获的异常?

来自分类Dev

为什么用不同的方式修改字符串会有不同的行为?

来自分类Dev

为什么Perl正则表达式捕获组在`print`和arithmentic运算之间的行为会有所不同?

来自分类Dev

为什么流到具有不同函数的输出时std :: numeric_limits <float> :: min()的行为会有所不同?

来自分类Java

如果调用println,EntityManager在尝试捕获中找不到引用行为会有所不同

来自分类Dev

为什么链接到原理图与安装原理图时会有不同的行为?

来自分类Dev

为什么从函数调用Bash的“源”命令的行为会有所不同?

来自分类Dev

为什么以foreach调用时,ForEach-Object的行为会有所不同?

来自分类Dev

为什么对于相同但按比例缩放的数据,绘图的行为会有所不同?

Related 相关文章

  1. 1

    来源与 为什么会有不同的行为?

  2. 2

    当类中的counter较大时,为什么java线程的行为会有所不同?

  3. 3

    为什么当接口关闭时,ip和ifconfig会有不同的行为?

  4. 4

    当类在函数内时,为什么类中的全局行为会有所不同?

  5. 5

    为什么当类型实现接口时,行为会有所不同?

  6. 6

    为什么在递增计数与递减计数时,for循环的行为会有所不同?

  7. 7

    为什么更改iframe高度时锚点会有不同的行为?

  8. 8

    地图与清单;为什么会有不同的行为?

  9. 9

    为什么会有这种不同的行为?我对吗?

  10. 10

    为什么当应用程序在后台时本机线程的行为会有所不同?

  11. 11

    在直接分配或从get-content检索数组时,为什么数组的行为会有所不同

  12. 12

    将VB.NET代码迁移到C#时,为什么for循环的行为会有所不同?

  13. 13

    为什么在以“ self”为前缀时,Ruby实例方法调用的行为会有所不同?

  14. 14

    为什么在使用ICustomTypeDescriptor时TypeDescriptor.GetProperties对于类型和对象的行为会有所不同

  15. 15

    为什么使用默认构造函数构造std :: string对象时,其行为会有所不同?

  16. 16

    为什么在测试用例中时,此TensorFlow代码的行为会有所不同?

  17. 17

    为什么使用交叉元运算符时** 2和²的行为会有所不同?

  18. 18

    当环境将Dev更改为Prod时,为什么此Unzip Shell脚本的行为会有所不同?

  19. 19

    提供通用类型与直接类型时,为什么Typescript映射元组类型的行为会有所不同?

  20. 20

    为什么在for循环中更新Python生成器时,其行为会有所不同?

  21. 21

    为什么会有未捕获的异常?

  22. 22

    为什么用不同的方式修改字符串会有不同的行为?

  23. 23

    为什么Perl正则表达式捕获组在`print`和arithmentic运算之间的行为会有所不同?

  24. 24

    为什么流到具有不同函数的输出时std :: numeric_limits <float> :: min()的行为会有所不同?

  25. 25

    如果调用println,EntityManager在尝试捕获中找不到引用行为会有所不同

  26. 26

    为什么链接到原理图与安装原理图时会有不同的行为?

  27. 27

    为什么从函数调用Bash的“源”命令的行为会有所不同?

  28. 28

    为什么以foreach调用时,ForEach-Object的行为会有所不同?

  29. 29

    为什么对于相同但按比例缩放的数据,绘图的行为会有所不同?

热门标签

归档