系统相关
首页 > 系统相关> > 启用Java断言是否会显着增加内存消耗?

启用Java断言是否会显着增加内存消耗?

作者:互联网

我一直在研究一个Java程序,它读取大型CSV文件,处理内容,并根据特定条件将其提交给Solr服务器.使用初始数据集,代码已经运行了一段时间.但由于它没有经过广泛测试,因此我最近在另一个大约四倍的数据集上运行-ea标志时启用了断言(~2.2MB vs~640KB).

即使将最大堆大小加倍到8G(-Xmx8g),我也会使用新数据集遇到OutOfMemoryException.我当前的代码不是特别节省内存,所以我可能能够解决代码中的问题.

但是,在阅读Java断言时,我注意到在这种情况下,内存消耗显然从未被讨论过.因此我的问题是:在JVM中启用断言是否会以可测量的数量增加内存消耗?在测试/调试代码和优化内存效率时是否应该考虑这一点?

解决方法:

好吧,一个断言如:

assert condition : "error message";

获取编译成一个简单的check-and-throw语句:

if(!$assertionsDisabled && !condition)
    throw new AssertionError("error message");

其中$assertionsDisabled是编译器为每个存在断言的类生成的常量字段:

static final boolean $assertionsDisabled = !ThisClass.class.desiredAssertionStatus();

所以我会说开销很小,特别是在内存方面.我将采用一个分析器并测量给定应用程序的内存消耗.您可能会发现其他地方存在内存问题.

标签:java,assertions,jvm-arguments
来源: https://codeday.me/bug/20190623/1275520.html