Ответ 1
Я вижу, что подобные вопросы часто задают, и я еще не нашел удовлетворительного ответа.
Ответы, которые я вижу чаще всего, зол: "Почему вас это волнует?" ответы. Некоторые люди много думают и прикладывают усилия к тому, чтобы задать вопрос, и тот, кто спрашивает, кажется глупым.
Некоторые люди ответят на этот вопрос с длинной диатрибой о различных типах памяти, которые выделяет Java, почему она это делает, и о том, какие параметры командной строки вы должны изучить. (редко кто-то становится очень конкретным)
Дело в том, что для небольших утилит Java - это память в большинстве операционных систем. Чем меньше полезность, тем она более очевидна. Разработчики Java уже давно были обусловлены тем, чтобы иметь дело с этим фактом или игнорировать его.
Причины для кажущегося аномального использования памяти многочисленны. Каждый поток получает определенный объем памяти для стека. Существует несколько потоков, которые будут начаты независимо от того, насколько проста программа для таких вещей, как очистка мусора, RMI и т.д. В Windows/64-бит, что 1 МБ на поток. Куча классов загружается по умолчанию и все ваши классы. Я уверен, что за кулисами происходит много других вещей.
Java сделала выбор компромисса, который нет на других языках. Время загрузки меньше, чем у большинства других языков. Первоначальная потребность в памяти выше. Строки, поскольку они наиболее часто используются, потребляют намного больше памяти, чем большинство людей понимают. Бесчисленное множество других. Выгода для многих ситуаций действительно окупается. Что-то вроде Hello World демонстрирует стоимость этих выборов больше, чем что-либо еще. Преимущества, такие как легкая многопоточная и почти-родная производительность, действительно не помогают вам с Hello World.
К сожалению, не так много, что вы можете сделать, чтобы действительно минимизировать память, используемую простым приложением. Существуют вышеупомянутые переключатели командной строки, и пробная версия и ошибка могут свести ваше заявленное использование до уровня 10-15 мб. Я уверен, но эти варианты и время, потраченные на их определение, не будут применяться к широкому кругу вопросов будущих приложений. Вам нужно будет пройти один и тот же процесс для следующего приложения. Бросьте в GUI-интерфейс и некоторые протоколирования и еще одну общую библиотеку или две, и ваш базовый номер будет быстро стрелять до 60mb.
Ты не делаешь ничего плохого. Это то, как все работает на Java. Вы привыкнете к этому. Из-за этого вы выберете другой язык, и это тоже ОК.