программы для писания кода на java
Топ-10 IDE для Java
Вы уже должны были понять, что Java-IDE действительно необходима, а особенно такая, которая поддерживает сразу несколько языков программирования.
Топ 10 IDE для Java-разработки
NetBeans — лучшая Java-IDE, развиваемая Oracle (бесплатное программное обеспечение)
NetBeans решает большинство проблем, с которыми разработчик может столкнуться в процессе работы. Эта IDE позволяет управлять всеми задачами: анализом, проектированием, отладкой, модульным тестированием, управлением исходным кодом и развертыванием.
Также IDE поставляется с мощным профайлером кода, который помогает оптимизировать производительность приложения ( скорость работы и потребление памяти ). Кроме этого она включает в себя визуальный отладчик, позволяющий корректировать создаваемые пользовательские интерфейсы, без необходимости правки кода.
IntelliJ IDEA — лучшая IDE для Java-разработчиков (премиум Java-IDE)
IntelliJ IDEA поставляется в двух редакциях. Бесплатная версия предназначена для студентов, преподавателей и разработчиков плагинов. Платная — для организаций, разрабатывающих коммерческие приложения.
IntelliJ Community Edition
IntelliJ Ultimate Edition
Eclipse — популярная IDE для Java-разработчиков (бесплатное программное обеспечение)
Eclipse обладает всеми необходимыми функциями, которые должна иметь идеальная Java IDE :
Как видите, Eclipse содержит много функций, позволяющих экономить время. Вы даже можете создавать собственные шаблоны кода, чтобы повысить скорость разработки.
Android Studio — Java IDE, созданная специально для Android-разработчиков
IDE поддерживает целый ряд полезных функций : интеллектуальное редактирование кода, отладка, модульное тестирование и профилирование кода. Рассмотрим каждую из них подробнее.
Крутые функции среда разработки Java для Android :
JDeveloper — бесплатная среда разработки Java-приложений
JDeveloper также включает в себя два инструмента отслеживания — встроенные генераторы схем XSD / XML и инструменты для запуска тестов.
DrJava — простая среда разработки Java-программ
DrJava объединяет такие функции, как интеллектуальный редактор кода, интерактивный терминал для оценки выходных данных программы, отладчик исходного кода и инструмент запуска модульных тестов.
IDE поддерживает Java 8 и более новые версии. И еще одно полезное дополнение — интеграция с инструментом Jacoco для охвата кода. Когда вы запускаете модульные тесты, он генерирует отчеты, содержащие в себе ссылки, указывающие на охват кода.
JEdit — продвинутый редактор для Java-разработчиков
UDE предлагает ряд современных функций:
MyEclipse — полноценная IDE для Java-разработки
Данная среда разработки Java поддерживает корпоративную разработку, веб-разработку и веб-разработку полного цикла.
Рассмотрим функции, которые она предоставляет:
MyEclipse содержит функции, которые могут повысить производительность любого Java-разработчика.
JCreator — простая среда разработки Java
JCreator включает в себя множество полезных функций:
При создании этой IDE должное внимание было уделено простоте использования, скорости, производительности и отличному пользовательскому интерфейсу. Во многом авторы ориентировались на Microsoft Visual Studio.
GreenFoot — Java Online компилятор и IDE
IDE подробно документирует каждую функцию, предоставляя документацию, как новичкам, так и опытным пользователям. Это помогает быстро развивать свои навыки.
Эта среда разработки Java имеет понятный пользовательский интерфейс и включает в себя одно окно для моделирования всех объектов и классов приложения.
У GreenFoot есть своя целевая аудитория, к которой относятся студенты, преподаватели и тренеры. При этом в ней реализованы все функции, необходимые для Java- разработчика :
Заключение — вы нашли для себя подходящую Java IDE?
Мы хотели бы, чтобы данный обзор помог вам в выборе правильного инструмента для разработки.
Пожалуйста, опубликуйте ваши мнения по текущей теме материала. Мы очень благодарим вас за ваши комментарии, отклики, дизлайки, лайки, подписки!
10 лучших IDE для Java в 2021 году
Хотя вы можете писать свои программы на Java в простом текстовом редакторе, Java IDE с полезными инструментами значительно повысит вашу эффективность. IDE будет включать редактор исходного кода, инструменты автоматизации сборки и отладчик, чтобы упростить программирование на Java. Но с таким количеством опций на рынке может быть сложно определить, какая IDE лучше всего подходит для вас.
Сегодня мы обсудим основные требования, которые следует учитывать при выборе Java IDE, и 10 лучших Java IDE на 2021 год.
Что делает хорошую Java IDE?
IDE, или интегрированная среда разработки, объединяет все инструменты, необходимые для написания, отладки и тестирования кода. IDE позволяет разработчикам работать в единой среде и улучшать рабочий процесс программирования. Каждая IDE имеет разные ресурсы, но все они включают текстовый редактор, инструменты сборки и отладчик.
При выборе Java IDE важно сначала определить, что вам нужно от нее, чтобы убедиться, что в ней есть все необходимые инструменты для ваших нужд. Независимо от вашего уровня опыта, для вас найдется идеальная Java IDE.
Основные инструменты Java IDE
10 лучших Java IDE
1. Eclipse
Eclipse — одна из самых популярных Java IDE на рынке. Он бесплатный, с открытым исходным кодом и имеет обширную экосистему плагинов, которая позволяет пользователям настраивать функции для разработки приложений.
Eclipse IDE поставляется как в настольной, так и в облачной версиях, причем облачная версия позволяет разработчикам писать код в веб-браузере.
Eclipse — лучший выбор из-за его инструментов разработки. Он предлагает Eclipse Marketplace, который содержит множество плагинов, доступных для загрузки, а также среду разработки плагинов, которая позволяет разработчикам создавать свои собственные функции.
Eclipse поддерживает более 100 языков программирования, включая JavaScript, Groovy и Scala, и имеет надежный набор инструментов моделирования, построения диаграмм и тестирования.
Плюсы:
Минусы:
Пример использования: вы многоязычный разработчик, ищущий среду IDE, которая предлагает обширную среду плагинов, и не возражаете потратить время на настройку своего опыта.
Кроссплатформенность: Windows, Mac OS, Linux, Solaris
Цена: Бесплатно
2. NetBeans
Apache NetBeans — это официальная IDE для Java 8, что делает ее лучшей IDE для Java для создания настольных, мобильных и веб-приложений. NetBeans имеет открытый исходный код и используется для разработки настольных, веб-и мобильных приложений наряду с HTML5 и C ++.
NetBeans позволяет легко настраивать программные приложения, поскольку он выделяет код Java синтаксически и семантически.
Благодаря мощным инструментам рефакторинга и отладки NetBeans помогает повысить точность и эффективность. Разработчики в основном используют NetBeans для Java, но у него есть расширения, позволяющие работать с другими языками программирования, такими как C, C ++ и JavaScript.
Плюсы:
Минусы:
Пример использования: вы многоязычный разработчик и ищете готовую IDE с инструментами для совместной работы разработчиков и поддержкой Maven.
Кроссплатформенность: Linux, Mac OS, Windows, Solaris
Цена: Бесплатно
3. IntelliJ IDEA
IntelliJ — одна из лучших IDE для разработки на Java. Это функциональная и эргономичная IDE с функциями для повышения производительности без загромождения пользовательского интерфейса. Он включает в себя набор инструментов, упрощающих программирование, таких как интеллектуальное завершение, межъязыковой рефакторинг, анализ потока данных и языковые инъекции.
IntelliJ доступен в двух редакциях: лицензионная версия Apache 2 для сообщества и закрытая окончательная редакция. Версия для сообщества является бесплатной и с открытым исходным кодом, с упором на разработку Android и виртуальных машин Java (JVM). Окончательная версия является платной, с упором на веб-разработку и корпоративную разработку.
Плюсы:
Минусы:
Пример использования: вы разработчик, чья компания будет платить за IDE и который ищет интуитивно понятную среду IDE, которую легко использовать прямо из коробки. У вас также есть быстрый компьютер, который может работать с более тяжелой IDE.
Кроссплатформенность: Linux, Mac OS, Windows
Цена: Community edition — бесплатно, Ultimate edition — 49,90 долларов в месяц (499 долларов в год).
4. BlueJ
Изначально BlueJ создавался для образовательного контента, но теперь используется в меньших масштабах для разработки программного обеспечения. Хотя BlueJ — отличная Java IDE для начинающих, многие ветераны Java предпочитают использовать BlueJ из-за его интерактивного и свободного от помех пользовательского интерфейса.
BlueJ обеспечивает простое взаимодействие с объектами и имеет мощный редактор, который помогает разработчикам визуально сканировать свой код и создавать динамические объекты. BlueJ — это инновационная Java IDE с уникальными функциями, которых не хватает многим другим, такими как раскраска области видимости, панели кода и панели объектов. Он портативен и поддерживает различные операционные системы.
Плюсы:
Минусы:
Пример использования: вы новичок в разработке Java и хотите больше попрактиковаться в создании простых проектов в интуитивно понятной и легкой среде.
Кроссплатформенность: Windows, Linux, Mac OS
Цена: Бесплатно
Познакомьтесь с Java
Обновите свои навыки Java, не просматривая видео или документацию. Текстовые схемы обучения Educative просты в использовании и содержат среду программирования в реальном времени, что делает обучение быстрым и эффективным.
Java для программистов
5. Oracle JDeveloper
JDeveloper — это бесплатная IDE, предлагаемая Oracle. Он включает функции для разработки приложений на Java, PHP, SQL, XML, HTML и JavaScript. JDeveloper охватывает весь жизненный цикл разработки : кодирование, проектирование, отладку, оптимизацию, профилирование и развертывание.
Он интегрируется с Oracle Application Development Framework (Oracle ADF) для упрощения разработки.
JDeveloper предлагает визуальные и декларативные редакторы и позволяет разработчикам напрямую редактировать свои приложения из среды кодирования. JDeveloper имеет функцию перетаскивания, которая упрощает разработку приложений. Он также поддерживает Java EE и Java SE.
Плюсы:
Минусы:
Пример использования: вы опытный Java-разработчик, ищущий широкий набор инструментов и компьютер, на котором можно запускать тяжелую программу.
Кроссплатформенность: Windows, Linux, Mac OS
Цена: Бесплатно
6. MyEclipse
MyEclipse — это проприетарная среда разработки Java, построенная на платформе Eclipse. Он использует как частный, так и открытый исходный код в среде разработки, а его инструменты могут использоваться для разработки приложений Java и веб-разработки. MyEclipse предлагает поддержку Angular, HTML, TypeScript и JavaScript.
Он также поддерживает соединители серверов баз данных и приложений и имеет расширенную поддержку Maven и Spring. MyEclipse помогает создавать мощные внешние и внутренние интерфейсы.
Плюсы:
Минусы:
Пример использования: вы знакомы с Eclipse, и ваша компания будет платить за IDE. У вас также есть быстрый компьютер для работы с тяжелой IDE.
Кроссплатформенность: Linux, Mac OS, Windows
Цена: стандартная версия — 31,75 долларов в год, безопасная версия — 75 долларов в год.
7. Greenfoot
Greenfoot был разработан с образовательной целью сделать программирование на Java более простым и увлекательным для молодых разработчиков. Он использует двухмерную графику для создания интерактивных программ, игр и симуляторов.
Эта IDE привлекает внимание учителей и студентов и предоставляет им платформу для онлайн-взаимодействия. Он предлагает бесплатный доступ к звукам и анимации и иллюстрирует такие концепции, как объектно-ориентированное программирование, взаимодействие объектов и параметры.
Плюсы:
Минусы:
Пример использования: вы — новый разработчик Java, ищущий простую в освоении среду IDE с сильным онлайн-сообществом и интерактивным интерфейсом.
Кроссплатформенность: Windows, Linux, Mac OS, Solaris
Цена: Бесплатно
8. jGRASP
jGRASP — это легкая Java IDE, которая автоматически создает программные визуализации. Он был разработан на Java, поэтому не зависит от платформы и работает на всех платформах с JVM. jGRASP предлагает рабочую среду, интегрированный отладчик и диаграммы классов UML.
jGRASP может создавать статические программные визуализации исходного кода и визуализации структур данных во время выполнения. Он даже может создавать диаграммы структуры управления для других языков программирования, таких как Python, C ++, Objective-C и Ada.
Эта легкая IDE настраивается с большинством бесплатных и коммерческих компиляторов для разных языков программирования.
Плюсы:
Минусы:
Пример использования: вы многоязычный разработчик, которому нравится визуализировать свои проекты, и вам не нужен модный графический интерфейс.
Кроссплатформенность: Linux, Mac OS, Windows
Цена: Бесплатно
9. JCreator
JCreator — это мощная и легкая Java IDE, написанная на C ++, что делает ее быстрее, чем другие Java IDE. Он имеет интерфейс, аналогичный интерфейсу Microsoft Visual Studio, что упрощает навигацию по исходному коду. JCreator может обрабатывать различные профили JDK для нескольких проектов и предлагает разработчикам строгие рекомендации по API.
Это отличный вариант для новичков благодаря интуитивно понятному пользовательскому интерфейсу. Он предоставляет такие функции, как шаблоны проектов, автозавершение кода, выделение синтаксиса и мастера. Это позволяет разработчикам напрямую компилировать или запускать свой Java-код без запуска основного документа. JCreator предлагается в версиях Pro Edition и LE Edition.
Плюсы:
Минусы:
Пример использования: вы пользователь Windows, который ищет быструю среду IDE с чистым интерфейсом, и вы готовы за нее платить.
Не кроссплатформенный: Windows
Цена: JCreator Pro — 79 долларов, JCreator LE — 35 долларов.
10. DrJava
DrJava — это легкая IDE, разработанная для начинающих и студентов. Хотя он не такой мощный, как некоторые другие IDE из этого списка, он имеет удобный интерфейс и единообразный внешний вид на разных платформах.
DrJava позволяет разработчикам интерактивно оценивать свой код с консоли и представлять свои результаты в той же консоли. Он помогает разработчикам с такими функциями, как поиск / замена, автозаполнение, автоматический отступ, комментирование и раскраска синтаксиса. Он даже интегрируется в Eclipse через плагин.
Плюсы:
Минусы:
Пример использования: вы новичок в разработке на Java и хотите практиковать базовые проекты, ничего не настраивая. Вы не хотите возиться с установкой и настройкой тяжелой IDE.
Кроссплатформенность: Linux, Windows, Mac OS
Быстрый старт в Java: от установки необходимого софта до первой программы
Как вы знаете, Java — один из самых популярных языков программирования в мире и его знание существенно увеличит вашу значимость как программиста. Итак, вы решили начать писать на этом языке. Вам понадобится поставить JDK для того, чтобы писать и запускать программы на Java. JDK — набор софта, разработанного Oracle, содержащий в себе компилятор (javac), среду выполнения (Java Runtime Environment), стандартную библиотеку языка, примеры и документацию. Прочитав эту статью, вы узнаете, как установить и настроить JDK на своей системе, что такое среда разработки и какие варианты IDE существуют для Java. Также вы напишете свою первую программу на Java.
Установка Java Development Kit
Итак, вы установили Java Development Kit, но это еще не всё. Необходимо настроить его для вашей системы.
Настройка JDK на примере Windows
После установки JDK и JRE не помешает установить на компьютер одну из IDE.
Установка IDE
Для начала разберёмся, что такое IDE.
IDE (Integrated Development Environment) — это комплекс программных средств, используемый программистами для разработки программного обеспечения. IDE позволяет с лёгкостью писать, запускать, отлаживать и тестировать код.
Для написания сложных программ целесообразно использовать IDE. Мы рассмотрим наиболее популярные.
Блокнот
Да, и в блокноте можно писать код! Для разработки вам потребуется всего лишь установить JDK и указать путь к ней. Пишете код в блокноте, компилируете с помощью командной строки. Тем не менее, для разработки сложных программ это не самый лучший вариант из-за отсутствия каких-либо дополнительных возможностей, присутствующих в продвинутых IDE.
NetBeans
NetBeans — выбор профессиональных Java-разработчиков. В ней есть уникальные возможности и инструменты, которые позволят вам сделать вашу программу кроссплатформенной, а код удобочитаемым. NetBeans поддерживает не только Java, но и другие языки программирования для десктоп- и веб-разработки. Она полностью бесплатна, скачать её можно с официального сайта. Вот лишь некоторые её возможности:
Eclipse
Eclipse, как и Netbeans — одна из наиболее популярных IDE. Она предоставляет впечатляющий интуитивно понятный интерфейс и производительную среду разработки, позволяющую комфортно разрабатывать приложения на Java. Скачать Eclipse можно бесплатно с официального сайта. Преимущества:
IntelliJ IDEA
IntelliJ IDEA — известная IDE для Java, написанная, как ни странно, на Java. Укомплектована уникальными инструментами и позволяет без проблем ориентироваться в программе. Нахождение ошибок и отладка кода никогда не были такими легкими, как с IntelliJ IDEA.
JCreator
JCreator — продвинутая и самая быстрая IDE для Java, написанная на C++.
Пишем свою первую программу
Итак, вы установили и настроили JDK, JRE и IDE для Java. Каков следующий шаг? Конечно же, написать программу, чтобы окончательно убедиться, что всё работает и вы готовы к изучению языка. Вы познакомитесь с базовой структурой кода на Java и создадите свою первую программу! Стоит отметить, что перед изучением Java следует ознакомиться хотя бы с самыми простыми принципами объектно-ориентированного программирования.
Структуру программы на Java можно представить так:
Структура программы на Java
В файле с исходным кодом содержится несколько классов — это части программы, имеющие определённые функции. Хорошей практикой считается разбиение программы на несколько файлов с исходным кодом, каждый со своим назначением. В классах содержатся методы — действия, которые могут выполнять объекты данного класса. В методе содержатся команды, с помощью которых вы можете получить желаемый результат.
Перед тем, как приступить к созданию программы, необходимо создать проект, а в нём и файл, в котором будет содержаться ваш код. Рассмотрим создание проекта на IDE Eclipse, но в остальных IDE процесс отличается не сильно. Cверху выберите «File», затем наведите курсор на «New», в открывшемся меню выберите «Java Project». В появившемся окне введите имя проекта и другие нужные вам настройки (если не уверены, что делать, то можно просто оставить все как есть) и нажмите «Next». Готово, вы создали проект! Осталось лишь создать в нём класс, в котором вы напишете свою первую программу. Щёлкните правой кнопкой мыши по вашему проекту (он должен появиться справа) и выберите «New» → «Class». Присвойте новому классу имя (в данном примере — это first ) и нажмите «Finish».
Приступим к написанию вашей первой программы. По традиции — это программа, выводящая на экран «Hello, world!».
Разберём по частям написанное нами:
Хорошо, вы написали вашу первую программу. Теперь её надо запустить. Для этого просто нажмите белую стрелочку в зеленом кружке на верхней панели (при наведении курсора на неё должно высветиться «Run»). После нажатия внизу откроется консоль, в которой вы увидите сообщение «Hello, world»! Поздравляю, вы написали вашу первую программу на Java и готовы погрузиться в увлекательный мир этого языка!
Полезные ссылки для дальнейшего изучения
Вот несколько ресурсов, которые помогут вам в изучении Java:
Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM
Ни для кого не секрет, что на данный момент Java — один из самых популярных языков программирования в мире. Дата официального выпуска Java — 23 мая 1995 года.
Эта статья посвящена основам основ: в ней изложены базовые особенности языка, которые придутся кстати начинающим “джавистам”, а опытные Java-разработчики смогут освежить свои знания.
* Статья подготовлена на основе доклада Евгения Фраймана — Java разработчика компании IntexSoft.
В статье присутствуют ссылки на внешние материалы.
1. JDK, JRE, JVM
Java Development Kit — комплект разработчика приложений на языке Java. Он включает в себя Java Development Tools и среду выполнения Java — JRE (Java Runtime Environment).
Java development tools включают в себя около 40 различных тулов: javac (компилятор), java (лаунчер для приложений), javap (java class file disassembler), jdb (java debugger) и др.
Среда выполнения JRE — это пакет всего необходимого для запуска скомпилированной Java-программы. Включает в себя виртуальную машину JVM и библиотеку классов Java — Java Class Library.
JVM — это программа, предназначенная для выполнения байт-кода. Первое преимущество JVM — это принцип “Write once, run anywhere”. Он означает, что приложение, написанное на Java, будет работать одинаково на всех платформах. Это является большим преимуществом JVM и самой Java.
До появления Java, многие компьютерные программы были написаны под определенные компьютерные системы, а предпочтение отдавалось ручному управлению памятью, как более эффективному и предсказуемому. Со второй половины 1990-х годов, после появления Java, автоматическое управление памятью стало общей практикой.
Существует множество реализаций JVM, как коммерческих, так и с открытым кодом. Одна из целей создания новых JVM — увеличение производительности для конкретной платформы. Каждая JVM пишется под платформу отдельно, при этом есть возможность написать ее так, чтобы она работала быстрее на конкретной платформе. Самая распространённая реализация JVM — это JVM Hotspot от OpenJDK. Также есть реализации IBM J9, Excelsior JET.
2. Выполнение кода на JVM
Согласно спецификации Java SE, для того, чтобы получить код, работающий в JVM, необходимо выполнить 3 этапа:
3. Загрузчики классов и их иерархия
Вернемся к загрузчикам классов — это специальные классы, которые являются частью JVM. Они загружают классы в память и делают их доступными для выполнения. Загрузчики работают со всеми классами: и с нашими, и с теми, которые непосредственно нужны для Java.
Представьте ситуацию: мы написали свое приложение, и помимо стандартных классов там есть наши классы, и их очень много. Как с этим будет работать JVM? В Java реализована отложенная загрузка классов, иными словами lazy loading. Это значит, что загрузка классов не будет выполняться до тех пор, пока в приложении не встретится обращение к классу.
Иерархия загрузчиков классов
Первый загрузчик классов — это Bootstrap classloader. Он написан на C++. Это базовый загрузчик, который загружает все системные классы из архива rt.jar. При этом, есть небольшое отличие между загрузкой классов из rt.jar и наших классов: когда JVM загружает классы из rt.jar, она не выполняет все этапы проверки, которые выполняются при загрузке любого другого класс-файла т.к. JVM изначально известно, что все эти классы уже проверены. Поэтому, включать в этот архив какие-либо свои файлы не стоит.
Следующий загрузчик — это Extension classloader. Он загружает классы расширений из папки jre/lib/ext. Допустим, вы хотите, чтобы какой-то класс загружался каждый раз при старте Java машины. Для этого вы можете скопировать исходный файл класса в эту папку, и он будет автоматически загружаться.
Еще один загрузчик — System classloader. Он загружает классы из classpath’а, который мы указали при запуске приложения.
Процесс загрузки классов происходит по иерархии:
4. Структура Сlass-файлов и процесс загрузки
Перейдем непосредственно к структуре Class-файлов.
Все числа, строки, указатели на классы, поля и методы хранятся в Сonstant pool — области памяти Meta space. Описание класса хранится там же и содержит имя, модификаторы, супер-класс, супер-интерфейсы, поля, методы и атрибуты. Атрибуты, в свою очередь, могут содержать любую дополнительную информацию.
Таким образом, при загрузке классов:
5. Исполнение байт-кода на JVM
В первую очередь, для исполнения байт-кода, JVM может его интерпретировать. Интерпретация — довольно медленный процесс. В процессе интерпретации, интерпретатор “бежит” построчно по класс-файлу и переводит его в команды, которые понятны JVM.
Также JVM может его транслировать, т.е. скомпилировать в машинный код, который будет исполняться непосредственно на CPU.
Команды, которые исполняются часто, не будут интерпретироваться, а сразу будут транслироваться.
6. Компиляция
Компилятор — это программа, которая преобразует исходные части программ, написанные на языке программирования высокого уровня, в программу на машинном языке, “понятную” компьютеру.
Компиляторы делятся на:
Также компиляторы могут классифицироваться по моменту компиляции:
7. Организация памяти в Java
Стек — это область памяти в Java, которая работает по схеме LIFO — “Last in — Fisrt Out” или “Последним вошел, первым вышел”.
Он нужен для того, чтобы хранить методы. Переменные в стеке существуют до тех пор, пока выполняется метод в котором они были созданы.
Когда вызывается любой метод в Java, создается фрейм или область памяти в стеке, и метод кладется на его вершину. Когда метод завершает выполнение, он удаляется из памяти, тем самым освобождая память для следующих методов. Если память стека будет заполнена, Java бросит исключение java.lang.StackOverFlowError. К примеру, это может произойти, если у нас будет рекурсивная функция, которая будет вызывать сама себя и памяти в стеке не будет хватать.
Ключевые особенности стека:
Куча разбита на несколько более мелких частей, называемых поколениями:
Почему отказались от Permanent generation? В первую очередь, это из-за ошибки, которая была связана с переполнением области: так как Perm имел константный размер и не мог расширяться динамически, рано или поздно память заканчивалась, кидалась ошибка, и приложение падало.
Meta space же имеет динамический размер, и во время исполнения он может расширяться до размеров памяти JVM.
Ключевые особенности кучи:
Основываясь на информации выше, рассмотрим, как происходит управление памятью на простом примере:
У нас есть класс App, в котором единственный метод main состоит из:
— примитивной переменой id типа int со значением 23
— ссылочной переменной pName типа String со значением Jon
— ссылочной переменной p типа person
Как уже упоминалось, при вызове метода на вершине стека создаётся область памяти, в которой хранятся данные, необходимые этому методу для выполнения.
В нашем случае, это ссылка на класс person: сам объект хранится в куче, а в стеке хранится ссылка. Также в стек кладется ссылка на строку, а сама строка хранится в куче в String pool. Примитив хранится непосредственно в стеке.
Для вызова конструктора с параметрами Person (String) из метода main() в стеке, поверх предыдущего вызова main() создается в стеке отдельный фрейм, который хранит:
— this — ссылка на текущий объект
— примитивное значение id
— ссылочную переменную personName, которая указывает на строку в String Pool.
После того, как мы вызвали конструктор, вызывается setPersonName(), после чего снова создается новый фрейм в стеке, где хранятся те же данные: ссылка на объект, ссылка на строку, значение переменной.
Таким образом, когда выполнится метод setter, фрейм пропадет, стек очистится. Далее выполняется конструктор, очищается фрейм, который был создан под конструктор, после чего метод main() завершает свою работу и тоже удаляется из стека.
Если будут вызваны другие методы, для них будут также созданы новые фреймы с контекстом этих конкретных методов.
8. Garbage collector
В куче работает Garbage collector — программа, работающая на виртуальной машине Java, которая избавляется от объектов, к которым невозможно получить доступ.
Разные JVM могут иметь различные алгоритмы сборки мусора, также существуют разные сборщики мусора.
Мы поговорим о самом простом сборщике Serial GC. Сборку мусора мы запрашиваем при помощи System.gc().
Как уже было упомянуто выше, куча разбита на 2 области: New generation и Old generation.
New generation (младшее поколение) включает в себя 3 региона: Eden, Survivor 0 и Survivor 1.
Old generation включает в себя регион Tenured.
Что происходит, когда мы создаем в Java объект?
В первую очередь объект попадает в Eden. Если мы создали уже много объектов и в Eden уже нет места, срабатывает сборщик мусора и освобождает память. Это, так называемая, малая сборка мусора — на первом проходе он очищает область Eden и кладёт “выжившие” объекты в регион Survivor 0. Таким образом регион Eden полностью высвобождается.
Если произошло так, что область Eden снова была заполнена, garbage collector начинает работу с областью Eden и областью Survivor 0, которая занята на данный момент. После очищения выжившие объекты попадут в другой регион — Survivor 1, а два остальных останутся чистыми. При последующей сборке мусора в качестве региона назначения опять будет выбран Survivor 0. Именно поэтому важно, чтобы один из регионов Survivor всегда был пустым.
JVM следит за объектами, которые постоянно копируются и перемещаются из одного региона в другой. И для того, чтобы оптимизировать данный механизм, после определённого порога сборщик мусора перемещает такие объекты в регион Tenured.
Когда в Tenured места для новых объектов не хватает, происходит полная сборка мусора — Mark-Sweep-Compact.
Во время этого механизма определяется, какие объекты больше не используются, регион очищается от этих объектов, и область памяти Tenured дефрагментируется, т.е. последовательно заполняется нужными объектами.