Дали задание. Что значит 9 Мб хипа для работы(-Xmx9m)?
Такая вот строка : для работы приложения на приложенном aiports.csv требуется не более 9 мб хипа для работы(-Xmx9m).
Ответы (1 шт):
Хип, куча - это один из двух типов памяти, используемых в Java. Например, есть такое объяснение:
Для оптимальной работы приложения JVM делит память на область стека (stack) и область кучи (heap). Всякий раз, когда мы объявляем новые переменные, создаем объекты или вызываем новый метод, JVM выделяет память для этих операций в стеке или в куче. В этой статье мы рассмотрим эти две области памяти: обозначим ключевые отличия между ними, рассмотрим, как они используют память, изучим предлагаемые ими функции и как их использовать.
- Стек
Стек работает по схеме LIFO (последним вошел, первым вышел). Всякий раз, когда вызывается новый метод, содержащий примитивные значения или ссылки на объекты, то на вершине стека под них выделяется блок памяти. Когда метод завершает выполнение, блок памяти, отведенный для его нужд, очищается, и пространство становится доступным для следующего метода. Основные особенности стека
Помимо того, что мы рассмотрели, существуют и другие особенности стека:
Он заполняется и освобождается по мере вызова и завершения новых методов Переменные в стеке существуют до тех пор, пока выполняется метод в котором они были созданы Если память стека будет заполнена, Java бросит исключение java.lang.StackOverFlowError Доступ к этой области памяти осуществляется быстрее, чем к куче является потокобезопасным, поскольку для каждого потока создается свой отдельный стек
- Куча
Эта область памяти используется для объектов и классов. Новые объекты всегда создаются в куче, а ссылки на них хранятся в стеке. Эти объекты имеют глобальный доступ и могут быть получены из любого места программы. Эта область памяти разбита на несколько более мелких частей, называемых поколениями:
Young Generation — область где размещаются недавно созданные объекты. Когда она заполняется, происходит быстрая сборка мусора Old (Tenured) Generation — здесь хранятся долгоживущие объекты. Когда объекты из Young Generation достигают определенного порога «возраста», они перемещаются в Old Generation Permanent Generation — эта область содержит метаинформацию о классах и методах приложения, но начиная с Java 8 данная область памяти была упразднена. Подробнее об этом можно узнать из нашей прошлой статьи, а также посмотрев видео
Мы можем управлять размерами кучи в зависимости от наших требований.