Я записал программу Java, которая тестирует скорость нескольких алгоритмов многопоточности на различных машинах с различными числами процессоров.
На некоторых машинах перестала работать сортировка слиянием*, потому что она требует, чтобы значительное пространство "кучи" работало над очень большими массивами. Я могу легко изменить пространство "кучи" Java сам прежде, чем запустить программу, но я чувствую, что более устойчивый и свободный доступ должен был бы сделать эту задачу из самой программы.
Существует ли способ запросить/достигнуть больше пространства "кучи" от виртуальной машины в ходе программы Java?
Примечание: Я действительно понимаю, что мог выполнить программу со сценарием как "программа java-xmx1g"; мое любопытство на этом предмете является частично академическим.
*Моя реализация НЕ объединяется встроенный. Это требует O (n) дополнительная память.
Java не была разработана для возможности динамического управления памятью, в данном случае «пространство кучи java», все наоборот, она была разработана для того, чтобы избавить программиста от необходимости беспокоиться об этом. .
Короче говоря, я боюсь сказать, что в Java нет ничего похожего на "malloc ()"
или "setHeapSize (int byes)"
.
В Java вы ограничены объемом памяти, доступной для JVM при запуске вашей программы. С точки зрения управления памятью это одновременно и благословение, и проклятие.
Для такого типа распределения динамической памяти вам следует попытаться реализовать свой алгоритм, используя вместо этого такие языки, как C
и / или C ++
.
Максимальный размер - это не размер используемой памяти, это динамический размер, основанный на использовании.
Максимальный размер кучи должен быть точкой, в которой вы бы предпочли, чтобы программа завершилась ошибкой, чем использовала больше памяти. Нет смысла менять это динамически, даже академически.
Насколько мне известно, нет способа контролировать размер кучи во время выполнения.
Это может быть необязательно: вы можете указать минимальный и максимальный размер кучи с помощью ключей -Xms и -Xmx соответственно. (например, -Xms128m -Xmx512m) jvm будет управлять фактическим размером кучи в этих пределах.