Реализации Garbage Collector.
– Serial GC
Это последовательная сборка молодого и старого поколения в области памяти Java.
– Parallel GC
Работает также как и Serial GC, но с использованием многопоточности.
– CMS GC (Concurrent Mark–and–Sweep)
Для сборки мусора задействуются несколько потоков, и происходит это через такой же алгоритм, как в Parallel GC.
Использовался до Java 7 и G1.
– G1 GC
Был задуман как замена CMS и разрабатывался для многопоточных приложений, которые характеризуются крупным размером кучи (более 4 ГБ).
– Epsilon
Был выпущен как часть JDK 11. Не реализует никакого реального механизма восстановления памяти. Как только доступная куча исчерпана, JVM завершает работу.
– Shenandoah
Выпущен как часть JDK 12. Ключевое преимущество перед G1 в том, что G1 может эвакуировать области кучи только тогда, когда приложение приостановлено, а Shenandoah перемещает объекты одновременно с приложением.
– ZGC
Выпущен как часть JDK 11 и улучшен в JDK 12. Предназначен для приложений, требующих низкой задержки (паузы в менее чем 10 мс) или задействующих очень большую кучу (несколько терабайт).
– Serial GC
Это последовательная сборка молодого и старого поколения в области памяти Java.
– Parallel GC
Работает также как и Serial GC, но с использованием многопоточности.
– CMS GC (Concurrent Mark–and–Sweep)
Для сборки мусора задействуются несколько потоков, и происходит это через такой же алгоритм, как в Parallel GC.
Использовался до Java 7 и G1.
– G1 GC
Был задуман как замена CMS и разрабатывался для многопоточных приложений, которые характеризуются крупным размером кучи (более 4 ГБ).
– Epsilon
Был выпущен как часть JDK 11. Не реализует никакого реального механизма восстановления памяти. Как только доступная куча исчерпана, JVM завершает работу.
– Shenandoah
Выпущен как часть JDK 12. Ключевое преимущество перед G1 в том, что G1 может эвакуировать области кучи только тогда, когда приложение приостановлено, а Shenandoah перемещает объекты одновременно с приложением.
– ZGC
Выпущен как часть JDK 11 и улучшен в JDK 12. Предназначен для приложений, требующих низкой задержки (паузы в менее чем 10 мс) или задействующих очень большую кучу (несколько терабайт).
👍4🔥4✍1👨💻1🫡1
Цикл while в Java.
Этот цикл в Java структурно выглядит так:
while (expression) {
statement(s)
}
Здесь:
expression – условие цикла, выражение, которое должно возвращать boolean значение.
statement(s) – тело цикла (одна или более строк кода).
Перед каждой итерацией будет вычисляться значение выражения expression. Если результатом выражения будет true, выполняется тело цикла – statement(s).
Этот цикл в Java структурно выглядит так:
while (expression) {
statement(s)
}
Здесь:
expression – условие цикла, выражение, которое должно возвращать boolean значение.
statement(s) – тело цикла (одна или более строк кода).
Перед каждой итерацией будет вычисляться значение выражения expression. Если результатом выражения будет true, выполняется тело цикла – statement(s).
👍6🔥2🎄2⚡1👌1👨💻1
Цикл do..while в Java.
Структура do.. while выглядит так:
do {
statement(s)
} while (expression);
Здесь:
expression – условие цикла, выражение, которое должно возвращать boolean значение.
statement(s) – тело цикла (одна или более строк кода).
В отличие от while, значение expression будет вычисляться после каждой итерации. Если результатом выражения будет true, в очередной раз выполнится тело цикла – statement(s) (как минимум раз).
Структура do.. while выглядит так:
do {
statement(s)
} while (expression);
Здесь:
expression – условие цикла, выражение, которое должно возвращать boolean значение.
statement(s) – тело цикла (одна или более строк кода).
В отличие от while, значение expression будет вычисляться после каждой итерации. Если результатом выражения будет true, в очередной раз выполнится тело цикла – statement(s) (как минимум раз).
👍4✍2🔥2⚡1🥰1👌1👨💻1🫡1🆒1
Цикл for в Java.
Этот Java цикл выглядит так:
for (initialization; termination; increment) {
statement(s)
}
Здесь:
initialization – выражение, которое инициализирует выполнение цикла. Исполняется только раз в начале цикла. Чаще всего в данном выражении инициализируют счетчик цикла.
termination – boolean выражение, которое регулирует окончание выполнения цикла. Если результат выражения будет равен false, цикл for прервется.
increment – выражение, которое исполняется после каждой итерации цикла. Чаще всего в данном выражении происходит инкрементирование или декрементирование переменной счетчика.
statement(s) – тело цикла.
Выражения initialization, termination, increment опциональны. Если опустить каждое из них, мы получим бесконечный цикл:
// бесконечный цикл
for ( ; ; ) {
// код тела цикла
}
Этот Java цикл выглядит так:
for (initialization; termination; increment) {
statement(s)
}
Здесь:
initialization – выражение, которое инициализирует выполнение цикла. Исполняется только раз в начале цикла. Чаще всего в данном выражении инициализируют счетчик цикла.
termination – boolean выражение, которое регулирует окончание выполнения цикла. Если результат выражения будет равен false, цикл for прервется.
increment – выражение, которое исполняется после каждой итерации цикла. Чаще всего в данном выражении происходит инкрементирование или декрементирование переменной счетчика.
statement(s) – тело цикла.
Выражения initialization, termination, increment опциональны. Если опустить каждое из них, мы получим бесконечный цикл:
// бесконечный цикл
for ( ; ; ) {
// код тела цикла
}
👍5⚡1❤1✍1🔥1👨💻1
Цикл for each в Java.
Этот цикл Java – разновидность цикла for для итерации коллекций и массивов.
Структура for each выглядит так:
for (String var : listOfStrings) {
statement(s)
}
Здесь:
listOfStrings – переменная, на которую ссылается существующий список или массив.
String var – определение новой переменной того же типа (String), что и коллекция listOfStrings.
statement(s) – тело цикла.
Данную конструкцию можно прочитать так: “Для каждого var из listOfStrings сделать...”.
Предположим, у нас есть массив строк из названий дней недели (на второй картинке). Теперь попробуйте предположить, что будет выведено после исполнения программы.
Этот цикл Java – разновидность цикла for для итерации коллекций и массивов.
Структура for each выглядит так:
for (String var : listOfStrings) {
statement(s)
}
Здесь:
listOfStrings – переменная, на которую ссылается существующий список или массив.
String var – определение новой переменной того же типа (String), что и коллекция listOfStrings.
statement(s) – тело цикла.
Данную конструкцию можно прочитать так: “Для каждого var из listOfStrings сделать...”.
Предположим, у нас есть массив строк из названий дней недели (на второй картинке). Теперь попробуйте предположить, что будет выведено после исполнения программы.
👍6🔥2⚡1✍1👨💻1
Что такое исключение в Java (Java Exception)?
Исключение (или exception) в Java представляет проблему, которая возникает в ходе выполнения программы.
В случае возникновения в Java исключения (какого-то исключительного события) имеет место прекращение нормального течения программы, и программа/приложение завершаются в аварийном режиме, что не является рекомендованным, и, как следствие, подобные случаи требуют в Java обработку таких исключений.
Существует множество причин, которые могут повлечь за собой возникновение исключения. Приведу в пример ряд подобных сценариев, в контексте которых может произойти исключение:
– Пользователь ввел недопустимые данные;
– Файл, который необходимо открыть, не найден;
– Соединение с сетью потеряно в процессе передачи данных либо JVM исчерпала имеющийся объем памяти;
– Объект, который мы ищем в базе данных, не существует;
– Деление на ноль;
– И еще очень множество примеров.
Некоторые из данных исключений вызваны пользовательской ошибкой, другие – программной ошибкой, в некоторых случаях, причиной тому может послужить сбой в материальных ресурсах.
Можно даже создавать свои исключения (их называют кастомными) на тот или иной случай.
В следующем посте подробно расскажу про иерархию исключений – очень важный раздел в Java, о котором спрашивают практически на любом собеседовании java–разработчика или стажера!
Исключение (или exception) в Java представляет проблему, которая возникает в ходе выполнения программы.
В случае возникновения в Java исключения (какого-то исключительного события) имеет место прекращение нормального течения программы, и программа/приложение завершаются в аварийном режиме, что не является рекомендованным, и, как следствие, подобные случаи требуют в Java обработку таких исключений.
Существует множество причин, которые могут повлечь за собой возникновение исключения. Приведу в пример ряд подобных сценариев, в контексте которых может произойти исключение:
– Пользователь ввел недопустимые данные;
– Файл, который необходимо открыть, не найден;
– Соединение с сетью потеряно в процессе передачи данных либо JVM исчерпала имеющийся объем памяти;
– Объект, который мы ищем в базе данных, не существует;
– Деление на ноль;
– И еще очень множество примеров.
Некоторые из данных исключений вызваны пользовательской ошибкой, другие – программной ошибкой, в некоторых случаях, причиной тому может послужить сбой в материальных ресурсах.
Можно даже создавать свои исключения (их называют кастомными) на тот или иной случай.
В следующем посте подробно расскажу про иерархию исключений – очень важный раздел в Java, о котором спрашивают практически на любом собеседовании java–разработчика или стажера!
👍9🔥2👨💻2❤1✍1🫡1
Иерархия исключений (exceptions) в Java.
Важно выучить иерархию исключений для того, чтобы хорошо ориентироваться в этой области и быть готовым без проблем описать эту структуру на собеседовании!
Все классы исключений в Java представляют подтипы класса java.lang.Exception. Класс исключений является подклассом класса Throwable. Помимо класса исключений существует также подкласс ошибок, образовавшихся из класса Throwable.
Контролируемые исключения – представляют собой вид исключений, которые происходят на стадии компиляции, их также именуют исключениями периода компиляции. Обозначенные исключения не следует игнорировать в ходе компиляции, они требуют должного обращения (разрешения) со стороны программиста.
Неконтролируемые исключения – представляют собой исключения, которые происходят во время выполнения. Они также носят название исключения на этапе выполнения. Данная категория может включать погрешности программирования, такие как логические ошибки, либо неверный способ использования API. Исключения на этапе выполнения игнорируются в ходе компиляции.
Ошибки – не являются исключениями, однако представляют проблемы, которые возникают независимо от пользователя либо программиста. Ошибки в вашем коде обычно игнорируются в виду того, что в редких случаях их обработка окажется результативной. К примеру, ошибка возникнет при переполнении стека. На этапе компиляции они также игнорируются.
Важно выучить иерархию исключений для того, чтобы хорошо ориентироваться в этой области и быть готовым без проблем описать эту структуру на собеседовании!
Все классы исключений в Java представляют подтипы класса java.lang.Exception. Класс исключений является подклассом класса Throwable. Помимо класса исключений существует также подкласс ошибок, образовавшихся из класса Throwable.
Контролируемые исключения – представляют собой вид исключений, которые происходят на стадии компиляции, их также именуют исключениями периода компиляции. Обозначенные исключения не следует игнорировать в ходе компиляции, они требуют должного обращения (разрешения) со стороны программиста.
Неконтролируемые исключения – представляют собой исключения, которые происходят во время выполнения. Они также носят название исключения на этапе выполнения. Данная категория может включать погрешности программирования, такие как логические ошибки, либо неверный способ использования API. Исключения на этапе выполнения игнорируются в ходе компиляции.
Ошибки – не являются исключениями, однако представляют проблемы, которые возникают независимо от пользователя либо программиста. Ошибки в вашем коде обычно игнорируются в виду того, что в редких случаях их обработка окажется результативной. К примеру, ошибка возникнет при переполнении стека. На этапе компиляции они также игнорируются.
👍8🫡2❤🔥1✍1⚡1🔥1👨💻1
Обработка исключений в Java. Блок try/catch.
В случае возникновения в Java исключения (exception), или исключительного события, имеет место прекращение нормального течения программы, и программа/приложение завершаются в аварийном режиме, что не является рекомендованным, и, как следствие, подобные случаи требуют в Java обработку исключений.
Использование ключевых слов try и catch позволяет производить обработку исключения в Java.
Блок try/catch размещается в начале и конце кода, который может сгенерировать исключение. Синтаксис использования try/catch выглядит как на картинке.
Код, предрасположенный к исключениям, размещается в блоке try. Оператор catch включает в себя саму обработку исключения. При возникновении исключения в блоке try, будет выполнена обработка этого исключения в блоке catch, но исключение передается в блок catch и обрабатывается только тогда, когда тип произошедшего исключения в try представлен в блоке catch (на картинке обработано исключение ArrayIndexOutOfBoundsException – номер запрашиваемого индекса массива лежит за пределами длины этого массива, именно это исключение всплывает в блоке try).
За каждым блоком try должен немедленно следовать блок catch, либо блок finally (о нем расскажу в одном из след постах).
В случае возникновения в Java исключения (exception), или исключительного события, имеет место прекращение нормального течения программы, и программа/приложение завершаются в аварийном режиме, что не является рекомендованным, и, как следствие, подобные случаи требуют в Java обработку исключений.
Использование ключевых слов try и catch позволяет производить обработку исключения в Java.
Блок try/catch размещается в начале и конце кода, который может сгенерировать исключение. Синтаксис использования try/catch выглядит как на картинке.
Код, предрасположенный к исключениям, размещается в блоке try. Оператор catch включает в себя саму обработку исключения. При возникновении исключения в блоке try, будет выполнена обработка этого исключения в блоке catch, но исключение передается в блок catch и обрабатывается только тогда, когда тип произошедшего исключения в try представлен в блоке catch (на картинке обработано исключение ArrayIndexOutOfBoundsException – номер запрашиваемого индекса массива лежит за пределами длины этого массива, именно это исключение всплывает в блоке try).
За каждым блоком try должен немедленно следовать блок catch, либо блок finally (о нем расскажу в одном из след постах).
🔥7👍3👨💻2❤1🤔1😱1🫡1
Многократные блоки catch в Java.
За блоком try могут следовать несколько блоков catch.
Синтаксис многократных блоков catch выглядит следующим образом:
try {
// Защищенный код
} catch(ИсключениеТип1 e1) {
// Блок catch
} catch(ИсключениеТип2 e2) {
// Блок catch
} catch(ИсключениеТип3 e3) {
// Блок catch
}
Представленные выше операторы демонстрируют три блока catch, однако, после однократного try количество используемых блоков catch может быть произвольным. В случае возникновения исключения в try, это исключение выводится в первый блок catch в списке, если тип данных генерируемого исключения совпадает с ИсключениеТип1, – оно перехватывается в указанной области. В обратном случае, исключение переходит ко второму оператору catch. Это продолжается до тех пор, пока не будет произведен перехват совпадающего исключения, либо оно не пройдет через все операторы, в случае чего выполнение текущего метода будет прекращено, и исключение будет перенесено к предшествующему методу в стеке вызовов.
За блоком try могут следовать несколько блоков catch.
Синтаксис многократных блоков catch выглядит следующим образом:
try {
// Защищенный код
} catch(ИсключениеТип1 e1) {
// Блок catch
} catch(ИсключениеТип2 e2) {
// Блок catch
} catch(ИсключениеТип3 e3) {
// Блок catch
}
Представленные выше операторы демонстрируют три блока catch, однако, после однократного try количество используемых блоков catch может быть произвольным. В случае возникновения исключения в try, это исключение выводится в первый блок catch в списке, если тип данных генерируемого исключения совпадает с ИсключениеТип1, – оно перехватывается в указанной области. В обратном случае, исключение переходит ко второму оператору catch. Это продолжается до тех пор, пока не будет произведен перехват совпадающего исключения, либо оно не пройдет через все операторы, в случае чего выполнение текущего метода будет прекращено, и исключение будет перенесено к предшествующему методу в стеке вызовов.
👍5🫡3🔥2❤1✍1
Ключевые слова throws/throw в Java. Часть 1.
В случае если метод не может осуществить обработку контролируемого исключения, производится соответствующее уведомление при использовании ключевого слова throws в Java.
Ключевое слово throws появляется в конце сигнатуры метода.
При использовании ключевого слова throw вы можете произвести обработку вновь выявленного исключения либо исключения, которое было только что перехвачено.
Следует внимательно различать ключевые слова throw и throws в Java, так как throws используется для отложенной обработки контролируемого исключения, а throw, в свою очередь, используется для вызова заданного исключения.
Представленный на картинке метод отображает, что им генерируется RemoteException.
В случае если метод не может осуществить обработку контролируемого исключения, производится соответствующее уведомление при использовании ключевого слова throws в Java.
Ключевое слово throws появляется в конце сигнатуры метода.
При использовании ключевого слова throw вы можете произвести обработку вновь выявленного исключения либо исключения, которое было только что перехвачено.
Следует внимательно различать ключевые слова throw и throws в Java, так как throws используется для отложенной обработки контролируемого исключения, а throw, в свою очередь, используется для вызова заданного исключения.
Представленный на картинке метод отображает, что им генерируется RemoteException.
👍6🔥5❤1👨💻1
Ключевые слова throws/throw в Java. Часть 2.
Метод также может объявить о том, что им генерируется более чем одно исключение, в случае чего исключения представляются в виде перечня, отделенные друг от друга запятыми.
К примеру, следующий метод оповещает о том, что им генерируются RemoteException и InsufficientFundsException.
Метод также может объявить о том, что им генерируется более чем одно исключение, в случае чего исключения представляются в виде перечня, отделенные друг от друга запятыми.
К примеру, следующий метод оповещает о том, что им генерируются RemoteException и InsufficientFundsException.
👍4✍3🫡2⚡1🔥1