すべてのガベージ コレクター、100 万通りの異なる設定の組み合わせを試しました。しかし、結果は常に同じです - OutOfMemoryError.
ソフト参照によって参照されるオブジェクトをタイムリーに削除できるガベージコレクターを誰でも知ることができますか?
以下のエミュレータコードの例
package com;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;
class SoftReferenceCollector {
private static class Data {
public long[] l = new long[100];
}
private List<SoftReference<Data>> list = new ArrayList<>();
public void startFillCollection(int durationInSec) {
long i = 0;
long start = System.currentTimeMillis();
long end = start + durationInSec * 1000;
while (System.currentTimeMillis() < end) {
list.add(new SoftReference<>(new Data()));
++i;
if (i % 10000 == 0) {
sleep(1);
if (i % 1_000_000 == 0)
sleep(1000);
}
}
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ignored) {
}
}
}
public class Main6 {
public static void main(String[] args) {
SoftReferenceCollector softReferenceCollector = new SoftReferenceCollector();
softReferenceCollector.startFillCollection(11240);
}
}