0

すべてのガベージ コレクター、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);

    }
}

4

1 に答える 1