Как вычислить пространство, занимаемое TreeMap (а не количество элементов в нем) во время выполнения (в МБ)?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как вычислить пространство, занимаемое TreeMap (а не количество элементов в нем) во время выполнения (в МБ)?

Сообщение Anonymous »

Справочная информация:

Я работаю над индексатором и хочу установить пороговое значение (в байтах), когда текущий индекс должен быть сброшен на диск, и должен быть создан новый индекс для размещения большего количества объектов.
В настоящее время я просто сбрасываю данные на основе количества документов, обработанных индексатором, но это кажется очень элементарным и не учитывает тот факт, что некоторые документы могут быть массивными (МБ). уровень) и другие очень маленькие (уровень КБ).
Я хочу минимизировать использование ЦП и памяти, поэтому об использовании какой-либо инструментальной библиотеки не может быть и речи, поскольку они действительно приводят к большим накладным расходам при выборке кучи.
Что я изучил:
  • Я изучал возможность вычисления размера вручную, и хотя это дало бы приблизительную оценку, это кажется своего рода специальным исправлением и последним курорт.
  • Используется библиотека времени выполнения, но она ненадежна из-за разных периодов циклов сборки мусора.
  • Внешние библиотеки, такие как JOL, добавляют измеримые накладные расходы во время выполнения и являются запрещенными.
Ограничения:
  • Java 17
  • Не слишком тяжелая память/процессор
Код:

Код: Выделить всё

private static final int MAX_IN_MEMORY_LENGTH = 10_000; // placeholder threshold
private final Map invertedIndex = new TreeMap();

if (shouldFlush()) {
batchFileWriter.writeIndex(invertedIndex, indexFileCounter);
invertedIndex.clear();
indexFileCounter++;
return;
}

private boolean shouldFlush() {
return invertedIndex.size() >= MAX_IN_MEMORY_LENGTH; // Very rudimentary check, use heap size later.
}
Вопрос:
Каковы практические способы оценить или приблизить использование памяти структурой в памяти, такой как TreeMap, при этих ограничениях, чтобы я мог решить, когда выполнять сброс на диск? Меня устраивает любая стратегия оценки, если она не требует слишком много ресурсов и дает последовательную оценку.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -by-a-tree
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»