Различный доступный размер кучи Java - PullRequest
0 голосов
/ 02 декабря 2018

Я только что обнаружил, что есть некоторые библиотеки для вычисления мелкого размера Java-объекта, поэтому я подумал, что я также могу написать это очень простым способом.Вот что я попробовал.

  1. Запустите программу с Xmx скажем A
  2. Создайте объекты типа, размер которого вы хотите вычислить (скажем, типа T)и сохраните их в списке, чтобы GC не мог их очистить.
  3. Когда мы нажмем OOM, пусть код обработает его и очистит список.
  4. Теперь проверьте количество объектовтипа T мы выделили.Пусть это будет n
  5. Выполните бинарный поиск, чтобы определить дельта-порядок для успешного выделения n+1 объектов.

Вот код, который я опробовал

import java.util.ArrayList;
public class test {
    public static void main(String[] a) {
        ArrayList<Integer> l = new ArrayList<>();
        int i=0;
        try {
            while(true) {
                l.add(new Integer(1));
                i++;
            }
        } catch(Throwable e) {
        } finally {
            l.clear();
            System.out.println(i + "");
        }
    }
}

Но я заметил, что количество объектов, выделенных в каждом прогоне для одного и того же Xmx, варьировалось.Почему это?Есть ли что-нибудь внутри рандомизированной JVM?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...