[英]What is the best way of converting List<Long> object to long[] array in java?
[英]Best way to declare an array in a long running thread in Java
我有一個長時間運行的線程,它執行test()
方法很長時間。 聲明和初始化data
數組的最佳方法是什么(就內存和性能而言)? 如果data
是一維數組呢?
選擇#1
public void test() {
double[][] data; //declare only
while (true) {
//initialize data here every time.
data = new double[99][9999];
//do some procesing with data
}
}
選擇#2
public void test() {
double[][] data = new double[99][9999];
while (true) {
//reset everything in data
for (double[] row: data)
Arrays.fill(row, 0.0);
//do some procesing with data
}
}
選擇#3 - 有什么建議嗎?
因為我認為選擇 #2 在記憶方面更好。 在選擇 #1 的情況下,在每次迭代中,它都會在堆上獲得一個新的分配,並且之前的分配有資格進行垃圾回收。 但是,之前的分配何時空閑取決於垃圾收集器(GC)。 有時,長數組分配可能不會發生在年輕代中。 在這種情況下,它將在內存中停留一段時間(直到完全 GC)。 因此,只要線程正在運行,內存使用量就可能會增加。 GC 只在需要時才清除內存(尤其是老年代)。 這些觀察是否正確?
999x999999 大約是 100 萬個雙精度數,每個雙精度數為 8 個字節,即每次分配 8Gb。 您肯定希望重用如此大的內存塊,而不是在每次運行時將其扔給垃圾收集器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.