динамично увеличивающееся пространство "кучи" Java

Я записал программу Java, которая тестирует скорость нескольких алгоритмов многопоточности на различных машинах с различными числами процессоров.

На некоторых машинах перестала работать сортировка слиянием*, потому что она требует, чтобы значительное пространство "кучи" работало над очень большими массивами. Я могу легко изменить пространство "кучи" Java сам прежде, чем запустить программу, но я чувствую, что более устойчивый и свободный доступ должен был бы сделать эту задачу из самой программы.

Существует ли способ запросить/достигнуть больше пространства "кучи" от виртуальной машины в ходе программы Java?

Примечание: Я действительно понимаю, что мог выполнить программу со сценарием как "программа java-xmx1g"; мое любопытство на этом предмете является частично академическим.

*Моя реализация НЕ объединяется встроенный. Это требует O (n) дополнительная память.

9
задан Robz 4 August 2010 в 07:33
поделиться

3 ответа

Java не была разработана для возможности динамического управления памятью, в данном случае «пространство кучи java», все наоборот, она была разработана для того, чтобы избавить программиста от необходимости беспокоиться об этом. .

Короче говоря, я боюсь сказать, что в Java нет ничего похожего на "malloc ()" или "setHeapSize (int byes)" .

В Java вы ограничены объемом памяти, доступной для JVM при запуске вашей программы. С точки зрения управления памятью это одновременно и благословение, и проклятие.

Для такого типа распределения динамической памяти вам следует попытаться реализовать свой алгоритм, используя вместо этого такие языки, как C и / или C ++ .

2
ответ дан 3 November 2019 в 01:52
поделиться

Максимальный размер - это не размер используемой памяти, это динамический размер, основанный на использовании.

Максимальный размер кучи должен быть точкой, в которой вы бы предпочли, чтобы программа завершилась ошибкой, чем использовала больше памяти. Нет смысла менять это динамически, даже академически.

2
ответ дан 3 November 2019 в 01:52
поделиться

Насколько мне известно, нет способа контролировать размер кучи во время выполнения.

Это может быть необязательно: вы можете указать минимальный и максимальный размер кучи с помощью ключей -Xms и -Xmx соответственно. (например, -Xms128m -Xmx512m) jvm будет управлять фактическим размером кучи в этих пределах.

6
ответ дан 3 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: