启用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