Системный менеджер Ubuntu показывает полную память, занимаемую JRE (Java Runtime Environment). JRE содержит другую память, такую как Stack Memory (Native & Java-стеки), память кода (где есть классы Java и код), а также память кучи. Таким образом, память кучи, что JConsole всегда будет меньше, чем показывает менеджер памяти. Кроме того, JRE управляет памятью самостоятельно, независимо от ОС. Таким образом, возможно, что он уже получил больше памяти от ОС, но ваша программа в настоящее время требует меньше памяти. Итак, он держится так, что всякий раз, когда в следующий раз ваша программа требует больше памяти, ей не нужно идти в ОС, чтобы запросить дополнительную память. Потому что системные вызовы для запроса большего объема памяти из ОС стоят дорого.
Приходит в ваш JAR loading вопрос. Все банки, присутствующие в вашем пути к классу, не обязательно загружаются вашей JRE. Они будут загружаться по требованию. Таким образом, может случиться, что в вашем пути к классу 100 банок, но загружается только 2 класса в одной из банок. Таким образом, эти два класса будут загружены в память.
Для проведения более сложного анализа памяти я рекомендую вам использовать JVisualVM, который поставляется с несколькими плагинами, для анализа памяти в программе.
Это намного сложнее, чем это. –
JAR не загружаются в кучу. –
Любое обновление по указанному вопросу – Rajas