首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在64位Linux JVM上实现OutOfMemoryError

如何在64位Linux JVM上实现OutOfMemoryError
EN

Stack Overflow用户
提问于 2010-07-16 10:28:02
回答 7查看 1.2K关注 0票数 3

在我的单元测试中,我故意尝试引发一个OutOfMemoryError异常。我使用一个简单的语句,如下所示:

代码语言:javascript
复制
byte[] block = new byte[128 * 1024 * 1024 * 1024];

代码可以在64位和jdk6u21 64位的Win7上运行。但是当我在CentOS5 64位的jdk6u21上运行它时,没有抛出OutOfMemoryError,即使我把数组的大小变大了。

有什么想法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-16 15:32:16

如果您只想消耗所有内存,请执行以下操作:

代码语言:javascript
复制
    try {
        List<Object> tempList = new ArrayList<Object>();
        while (true) {
            tempList.add(new byte[128 * 1024 * 1024 * 1024]);
        }
    } catch (OutOfMemoryError OME) {
       // OK, Garbage Collector will have run now...
    }
票数 4
EN

Stack Overflow用户

发布于 2010-07-16 10:31:28

Linux并不总是立即为您分配您所请求的所有内存,因为许多实际应用程序要求的内存比它们需要的要多。这就是所谓的过度提交(这也意味着有时它会猜错,可怕的OOM killer会攻击)。

为了你的单元测试,我会手动抛出OutOfMemoryError

票数 5
EN

Stack Overflow用户

发布于 2010-07-16 13:05:51

128*1024*1024*1024=0,因为整型是32位的。Java不支持大于4 4Gb的数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3261513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档