Апплет: пространство кучи Java - PullRequest
7 голосов
/ 17 февраля 2011

Из-за небольшой ошибки в реализации я обнаружил, как быстро я могу достичь проблемы с пространством кучи Java

теперь ошибка исправлена, все в порядке, но она заставила меня задуматься, как решить эту проблему, и я нашел несколько решений, таких как

Java -Xms5m -Xmx15m MyApp

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

Следовательно, есть ли способ в RUNTIME в APPLET изменить размер кучи?

Ответы [ 4 ]

10 голосов
/ 17 февраля 2011

Вы можете добавить параметры в тег апплета. Но интересующий вас параметр доступен только на Java6 u10 или новее.

Пример:

<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
    <PARAM name="java_arguments" value="-Xmx256m">
</APPLET>

Здесь больше информации http://www.oracle.com/technetwork/java/javase/plugin2-142482.html#JAVA_ARGUMENTS

2 голосов
/ 17 февраля 2011

AFAIK, только пользователь может изменять настройки кучи JRE. Апплет не может изменить эти настройки.

Обновление:

Похоже, что в последних версиях JDK это возможно. Посмотрите: Как я могу запустить Java-апплет с большим объемом памяти?

Update2:

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

1 голос
/ 17 февраля 2011

JVM может начаться задолго до вашего апплета. Сейчас слишком поздно изменить размер кучи. Попробуйте Java Web Start, где вы можете контролировать это, порождая новая JVM для вашего апплета / приложения.

1 голос
/ 17 февраля 2011

Если он не указан в командной строке, вы должны получить его из настроек JVM.Поэтому при развертывании апплета в Интернете он будет зависеть от того, какие настройки памяти они установили на своем компьютере при запуске.Как правило, он установлен на 60-90 Мб по умолчанию, поэтому старайтесь держать его под этим.

Рассмотрите последствия, если апплет может изменить эти настройки ... что еще он может изменить.В конце концов, это просто вопрос об использовании безопасности, и Java стремится обеспечить безопасность перед функциональностью:)

...