Как я могу отключить сборщик "мусора" Java?

У нас есть веб-приложение PHP, которое называет двоичный файл Java для представления отчета PDF (с JasperReports). Двоичные выходы Java PDF к стандартному выводу и выходам; PHP затем отправляет PDF в браузер. Эта команда Java длится приблизительно 3 - 6 секунд, и я думаю, когда она длится 6-секундный, это - потому что GC умирает. Я хотел бы отключить GC, потому что так или иначе, когда команда выходит, вся память возвращается.

Я хотел бы знать, как отключить его для Java 1.4.2 и для Java 1.6.0, потому что мы в настоящее время тестируем обе JVM для наблюдения, который работает быстрее..

33
задан Mark Amery 8 April 2019 в 18:31
поделиться

6 ответов

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

-Xmx256M -Xms256M

Это даст программе 256 Мб оперативной памяти (по умолчанию 64 Мб). Однако сборка мусора не займет 3 секунды для JVM размера по умолчанию, поэтому вам, возможно, захочется более тщательно изучить, что делает программа. Yourkit profiler очень полезен для выяснения того, что занимает много времени.

28
ответ дан 27 November 2019 в 17:34
поделиться

Похоже, вы пытаетесь сэкономить время, но делаете это неправильно. Время, сэкономленное при отключении сборки мусора, будет тривиальным (для одной задачи) по сравнению со временем, затраченным на запуск и завершение java-процесса. Возможно, вы захотите запустить java-процесс, который вы можете несколько раз попросить выполнить требуемую работу, если ваша цель - производительность во время выполнения.

36
ответ дан 27 November 2019 в 17:34
поделиться

Вы уверены, что именно сборка мусора вызывает замедление? Запускали ли вы java с параметром -verbose:gc, чтобы увидеть, что происходит?

Вы не можете отключить сборку мусора в JVM. Однако вы можете посмотреть на настройку сборщика мусора для повышения производительности.

1
ответ дан 27 November 2019 в 17:34
поделиться

Как все говорили, вы не можете отключить сборщик мусора в JVM, что логично, потому что, если бы вы могли, были бы утечки памяти из-за того, что java не имеет явного способа для разработчика чтобы удалить данные кучи.

У вас есть доступ к исходному тексту этого двоичного файла java? Если да, возможно, стоит проанализировать это и посмотреть, есть ли какие-либо узкие места, которые можно было бы лучше написать, чтобы сократить активность GC. Это можно сделать с помощью большинства профилировщиков Java, например JProbe.

-1
ответ дан 27 November 2019 в 17:34
поделиться

Вы можете использовать опцию -Xmx для установки максимального размера кучи; использование большей кучи должно предотвратить скорое исчерпание памяти ВМ и, следовательно, необходимость сборки мусора.

2
ответ дан 27 November 2019 в 17:34
поделиться

GC включается только тогда, когда JVM не хватает памяти, так что либо GC, либо смерть. Попробуйте включить подробный GC и посмотрите, действительно ли он занимает значительное количество времени.

java -verbose:gc
28
ответ дан 27 November 2019 в 17:34
поделиться
Другие вопросы по тегам:

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