[英]findbugs report wrong line number and suppress error?
我有一個Java類,它使用System.GC()計算內存使用量。 但是,當我運行findbugs時,它總是報告錯誤的行號。 問題1:我使用intellij findbugs插件以及findbugs本機GUI來運行它。 結果相同。 我在這里做錯什么了嗎?
util.MemoryTestBench.lotsOfGC()強制進行垃圾收集; 除了基准測試代碼類外,這非常可疑。類:MemoryTestBench(util)行:35-35 ====>這是Thread.sleep(100)????????
死存儲來處理類:MemoryTestBench(util)行:23-23 ====>這是返回usedMemory()-prevUsedMemory ???
問題2:如何抑制錯誤DM_GC? 我嘗試了@SuppressWarnings,它沒有用。
測試代碼如下:
package util;
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
public class MemoryTestBench {
@SuppressWarnings (value = "DM_GC",
justification = "call GC to measure memory size")
public static long calculateMemoryUsage(ObjectFactory factory) {
Object handle = factory.makeObject();
long prevUsedMemory = usedMemory();
handle = null;
lotsOfGC();
prevUsedMemory = usedMemory();
handle = factory.makeObject();
lotsOfGC();
return usedMemory() - prevUsedMemory;
}
private static long usedMemory() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
private static void lotsOfGC() {
for (int i = 0; i < 20; i++) {
System.gc();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public static void showMemoryUsage(ObjectFactory factory) {
long mem = calculateMemoryUsage(factory);
System.out.println(
factory.getClass().getSimpleName() + " produced " +
factory.makeObject().getClass().getSimpleName() +
" which took " + mem + " bytes");
}
public static void main(String[] args) {
showMemoryUsage(new BigConcurrentHashMapFactory());
}
}
你應該把@SuppressWarnings lotsOfGC方法之前,而不是calculateMemoryUsage前
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.