[Перевод] Странности в исключениях JVM с точки зрения декомпилятора

Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого — например, Vineflower . В конце концов, я написала статью , в которой изложила мой подход к декомпиляции потока управления. Мои находки позволили значительно ускорить работу получившегося у меня прототипа. На тот момент я полагала, что этот метод не составит труда расширить и на декомпиляцию потока управления, возникающего при обработке исключений — то есть, что ему будут поддаваться блоки try…catch . В ретроспективе признаю: следовало ожидать, что это будет не так просто. Оказывается, здесь возникает множество пограничных случаев, варьирующихся от странного поведения javac до последствий, отражающихся на самой структуре JVM и формате файлов классов. Всё это – серьёзные осложнения. В данном посте я разберу все эти детали, расскажу, почему простые решения не работают, и на каком подходе я в итоге остановилась.

https://habr.com/ru/articles/965922/

#Java #JVM #байткод #исключения

Странности в исключениях JVM с точки зрения декомпилятора

Некоторое время назад я немного поэкспериментировала, пытаясь научиться декомпилировать файлы классов Java более эффективно, чем позволяют традиционные инструменты, предназначенные для этого —...

Хабр

Вот и хорошо, вот и чудненько!
В.И.Ленин

Любая, даже ограниченная, нормализация международной торговли пойдет только на пользу.

Однако, если пошлины будут снижены слишком* сильно - это демотивирует переносить производство в США...

"Администрация Трампа может отменить или снизить пошлины на ряд товаров, сообщает WSJ.

По данным издания, американский президент предложил отменить тарифы на сотни видов товаров, если поставляющие их страны заключат сделки с США".

#США
#пошлины_Трампа

#исключения

https://www.rbc.ru/politics/18/10/2025/68f35bc19a7947610c9f9922?from=from_main_11

Как бросить исключение без throws в Java: технический разбор с примерами

В Java существует старое, но всё ещё актуальное ограничение: если метод бросает checked-исключение (например, IOException), он обязан явно объявить это с помощью throws. Это требование — не от JVM, а от компилятора. Компилятор жёстко следит за декларациями, но вот JVM — нет. Что создаёт любопытную лазейку: обойти компилятор, оставаясь при этом в рамках спецификации JVM . Сегодня разберёмся, как это сделать с помощью Unsafe.throwException() , почему это вообще работает, где это может пригодиться, и на что стоит обратить внимание при использовании Java 17, 21 и 24.

https://habr.com/ru/companies/otus/articles/897384/

#java #throws #исключения #компилятор

Как бросить исключение без throws в Java: технический разбор с примерами

В Java существует старое, но всё ещё актуальное ограничение: если метод бросает checked‑исключение (например, IOException), он обязан явно объявить это с помощью throws. Это...

Хабр

[Перевод] 3200% нагрузки на процессор

Совсем недавно моя машина была в таком запущенном состоянии, что я едва мог подключиться к ней через ssh. 3200% нагрузки на CPU — полностью использовались все 32 ядра хоста! Сравните это с моим последним багом, когда использовалось всего одно ядро, то есть 100% К счастью, я использовал среду выполнения Java 17, у которой были дампы потоков с указанием времени CPU!

https://habr.com/ru/articles/887040/

#nullpointerexception #многопоточность #concurrency #исключения #баги

3200% нагрузки на процессор

Совсем недавно моя машина была в таком запущенном состоянии, что я едва мог подключиться к ней через ssh. 3200% нагрузки на CPU — полностью использовались все 32 ядра хоста!  Сравните это с моим...

Хабр

Почему мы отказались от выражения «assert» в Python

В текущем проекте на Python мы практически полностью отказались от использования выражений с ключевым словом assert , и в этой статье я расскажу почему. Рассмотрим кейсы где использование выражений assert уместно, а где оно может выстрелить в ногу, и как этого избежать.

https://habr.com/ru/articles/876170/

#python #assert #exception #исключения #pytest #pydantic #линтер #интерпретатор #баги #ошибки

Почему мы отказались от выражения «assert» в Python

Привет! Меня зовут Дмитрий, я backend-разработчик. В текущем проекте на Python мы отказались от использования выражений с ключевым словом assert , и в этой статье я расскажу почему. Ключевое слово...

Хабр

[Перевод] Полное руководство по обработке ошибок в Python

Я часто сталкиваюсь с разработчиками, очень хорошо знающими механику обработки ошибок в Python, однако когда я начинаю выполнять ревью их кода, он оказывается далеко неидеальным. Исключения в Python — это одна из тех областей, поверхностный уровень которого знает большинство, но многие разработчики даже не догадываются о существовании более глубокого, почти тайного уровня. Если вы хотите протестировать себя по этой теме, то проверьте, сможете ли вы ответить на следующие вопросы: Когда следует перехватывать исключения, генерируемые вызываемыми вами функциями, а когда этого делать не нужно? Как узнать, какие классы исключений нужно перехватывать? Что нужно делать при перехвате исключений для их «обработки»? Почему перехватывание всех исключений считается порочной практикой, и когда делать это приемлемо? Вы готовы узнать секреты обработки ошибок в Python? Тогда поехали!

https://habr.com/ru/articles/853056/

#обработка_ошибок #исключения #перехват_ошибок #exceptions #error_handling

Полное руководство по обработке ошибок в Python

Я часто сталкиваюсь с разработчиками, очень хорошо знающими механику обработки ошибок в Python, однако когда я начинаю выполнять ревью их кода, он оказывается далеко неидеальным. Исключения в Python —...

Хабр

[Перевод] Почему я предпочитаю исключения, а не значения ошибок

Качественная обработка ошибок — это ключ к созданию надёжных программ; но программистов она часто пугает, ведь всегда найдётся ещё один пограничный случай. В традиционных объектно-ориентированных языках программирования используются специальные классы исключений, которые можно выбрасывать, чтобы прекратить обычный поток управления и немедленно сообщить об ошибке. Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление: int safeDiv(int a, int b) {
if (b == 0)
throw Div0(); // Исключения передаются особым образом
return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
} Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err) , а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.

https://habr.com/ru/companies/ruvds/articles/843728/

#ruvds_переводы #исключения #отладка #ошибки_в_программе #сообщения_об_ошибках #коды_ошибок #exception

Почему я предпочитаю исключения, а не значения ошибок

Качественная обработка ошибок — это ключ к созданию надёжных программ; но программистов она часто пугает, ведь всегда найдётся ещё один пограничный случай. В традиционных объектно-ориентированных...

Хабр

Основы работы с файлами и потоками в C#

Работа с файлами — неотъемлемая часть многих проектов. Простая запись логов, чтение конфигурационных файлов или обработка больших данных - все это является частью взаимодействовия с файловой системой. В этой статье мы рассмотрим основы работы с файлами и потоками в C#.

https://habr.com/ru/companies/otus/articles/826776/

#c# #программирование #потоки_данных #исключения #работа_с_файлами

Основы работы с файлами и потоками в C#

Привет, Хабр! Работа с файлами — неотъемлемая часть многих проектов. Простая запись логов, чтение конфигурационных файлов или обработка больших данных — все это является частью взаимодействовия с...

Хабр

Работа с новой архитектурой в Laravel 11

Основная "киллер-фича" фреймворка Laravel версии 11 - "плоский код". Под капот убрано всё, что большинством разработчиков не используется и, по сути, является "мусором". А также убраны некоторые действительно полезные вещи. Под катом мы рассмотрим что куда делось и как улучшить взаимодействие с новой архитектурой.

https://habr.com/ru/articles/822185/

#laravel #middleware #exceptions #исключения #php #маршрутизация #маршруты #урл #cron #вебприложение

Работа с новой архитектурой в Laravel 11

В одном из прошлых постов было озвучено изучение мидлварей в Laravel 11 до его релиза. Что изменилось с тех пор и с чем мы столкнулись на практике, рассмотрим ниже. Основная "киллер-фича" фреймворка...

Хабр

[Перевод] Xv6: учебная Unix-подобная ОС. Глава 4: Прерывания и системные вызовы

Глава расскажет, как xv6 обрабатывает прерывания на RISC-V и о хитростях виртуальной памяти: как использовать ошибки доступа к страницам, чтобы оптимизировать работу ОС. Глава расскажет о копировании страниц при записи, ленивой выдаче страниц, выдаче страниц по необходимости и сбросе страниц на диск.

https://habr.com/ru/articles/794326/

#xv6 #операционная_система #прерывания #исключения #системные_вызовы #ядро #таблицы_страниц #виртуальная_память #copyonwrite #riscv

Xv6: учебная Unix-подобная ОС. Глава 4: Прерывания и системные вызовы

Предыдущая: Глава 3. Таблицы страниц Примечание. Авторы рекомендуют читать книгу вместе с исходным текстом xv6 . Авторы подготовили и лабораторные работы по xv6 . Xv6 работает на RISC-V, поэтому для...

Хабр