Насколько я знаю, мы не можем заставить сбор мусора в JAVA. Лучшее, что мы можем сделать, это отправить запрос, вызвав System.gc()
или Runtime.gc()
. Это отправит запрос на сбор мусора в JVM, но не гарантирует, что сбор мусора произойдет. Поэтому мой вопрос: существуют ли какие-либо конкретные причины, WHY JVM спроектирован таким образом, что он не поддерживает сборку Force Garbage Collection?
Почему JVM разработан таким образом, что он не позволяет принудительно собирать мусор?
Ответ 1
Принудительная сборка мусора неэффективна и не нужна в большинстве случаев 1... если вы правильно написали свою программу.
Ссылка:
Оказывается, если вы управляете запуском JVM, который будет запускать ваше приложение (или апплет или сервлет или что-то еще), вы можете гарантировать, что вызов System.gc()
будет запускать GC. Или, по крайней мере, так обстоит дело с Sun/Oracle JVM... где поведение контролируется с помощью опции -XX
в команде java
.
То, что делает javadoc, это то, что это зависит от платформы, и переносное приложение не может полагаться на него.
Что касается вашего вопроса:
ПОЧЕМУ JVM разработан таким образом, что он не поддерживает сборку Force Garbage Collection?
Так что JVM может быть защищен от воздействия производительности плохо написанного кода; например в апплетах, плагинах, сторонних библиотеках и т.д.
(И я полагаю, отчасти потому, что оригинальные инженеры Sun немного устали от людей, жалующихся на то, что "Java медленный", когда реальной проблемой были ненужные вызовы System.gc()
...)
1 - Но не всегда. Например, вызов System.gc()
в удобное время может быть способом избежать связанной с GC паузы в неудобное время. Однако, если ваш код работает только в том случае, если вы запускаете GC в определенных точках, то вы делаете что-то неправильно.
Ответ 2
Java разработан таким образом, что (в отличие от С++) вам не нужно беспокоиться о том, чтобы восстановить забытую память. Если память времени выполнения настроена правильно, вам не нужно заботиться о сборе мусора. Сказав, что выполнение gc() обычно вызывает развертку пространства молодого поколения.