Сравнение производительности ввода/вывода: C, C++, Rust, Golang, Java и Python
Сейчас существует большое количество языков программирования для создания бэкенд-сервисов. Это вызывает интерес в сравнении их производительности по различным критериям. К примеру, сервис Benchmarks Game сравнивает языки программирования на основе того, как они решают различные задачи. А TechEmpower измеряет производительность веб-фреймворков.
Это сподвигло автора выяснить настоящую стоимость затрат ресурсов, необходимых для “голого” ввода/вывода на различных платформах. Измерение прокси TCP, кажется, дается проще всего. Он включает только обработку входящих и исходящих соединений, а также передачу необработанных байтовых данных.
https://nuancesprog.ru/p/14464/
Сейчас существует большое количество языков программирования для создания бэкенд-сервисов. Это вызывает интерес в сравнении их производительности по различным критериям. К примеру, сервис Benchmarks Game сравнивает языки программирования на основе того, как они решают различные задачи. А TechEmpower измеряет производительность веб-фреймворков.
Это сподвигло автора выяснить настоящую стоимость затрат ресурсов, необходимых для “голого” ввода/вывода на различных платформах. Измерение прокси TCP, кажется, дается проще всего. Он включает только обработку входящих и исходящих соединений, а также передачу необработанных байтовых данных.
https://nuancesprog.ru/p/14464/
NOP::Nuances of programming
Сравнение производительности ввода/вывода: C, C++, Rust, Golang, Java и Python
Сравниваем, как различные языки, такие как C, C++, Rust, Golang, Java и Python, обрабатывают данные на вход/выход. Также попробуем выяснить, может ли Rust обрабатывать высокопроизводительные промисы.
AssertJ как способ значительно улучшить код ваших тестов
Недавно я открыл для себя прекрасный инструмент AssertJ. Его API гораздо лаконичнее чем стандартные assert-ы JUnit + Hamcrest. Код тестов читается проще. Он позволяет также тестировать базу.
AssertJ предоставляет абстрактный базовый класс AbstractAssert<>, расширяя который, вы можете добавить поддержку своих собственных типов и методов для проверки. В некоторых случаях это позволяет заметно сократить количество тестового кода и повысить его выразительность. Пример:
assertThat(check)
.hasType(Column.class)
.hasDiagnostic(Diagnostic.COLUMNS_WITHOUT_DESCRIPTION)
.hasHost(PgHostImpl.ofPrimary())
.executing()
.isEmpty();
https://habr.com/ru/post/675778/
https://assertj.github.io/doc/
Недавно я открыл для себя прекрасный инструмент AssertJ. Его API гораздо лаконичнее чем стандартные assert-ы JUnit + Hamcrest. Код тестов читается проще. Он позволяет также тестировать базу.
AssertJ предоставляет абстрактный базовый класс AbstractAssert<>, расширяя который, вы можете добавить поддержку своих собственных типов и методов для проверки. В некоторых случаях это позволяет заметно сократить количество тестового кода и повысить его выразительность. Пример:
assertThat(check)
.hasType(Column.class)
.hasDiagnostic(Diagnostic.COLUMNS_WITHOUT_DESCRIPTION)
.hasHost(PgHostImpl.ofPrimary())
.executing()
.isEmpty();
https://habr.com/ru/post/675778/
https://assertj.github.io/doc/
Хабр
AssertJ как способ значительно улучшить код ваших тестов
Привет, Хабр! В 2019-2020 годах на одном из проектов я был идейным вдохновителем перехода на JUnit 5. Для проверок мы использовали стандартные ассерты и Hamcrest. Тогда мне казалось, что этого более...
Robocode
Достаточно давно я играл в такую старую, но замечательную игру Robocode. Это прям классика. Недавно я опять на нее набрел и хочу с вами ей поделиться.
Суть в том, что вы пишите алгоритм на Java и потом ваша стратегия сражается с другими стратегиями. Прелесть в том, что этот батл визуализируется.
Есть современный аналог от mail_ru и я там даже участвовал. Было прикольно. https://cups.online/ru/contests/?category=ai&utm_campaign=to-allcups&utm_medium=referral&utm_source=raic
https://robocode.sourceforge.io
Достаточно давно я играл в такую старую, но замечательную игру Robocode. Это прям классика. Недавно я опять на нее набрел и хочу с вами ей поделиться.
Суть в том, что вы пишите алгоритм на Java и потом ваша стратегия сражается с другими стратегиями. Прелесть в том, что этот батл визуализируется.
Есть современный аналог от mail_ru и я там даже участвовал. Было прикольно. https://cups.online/ru/contests/?category=ai&utm_campaign=to-allcups&utm_medium=referral&utm_source=raic
https://robocode.sourceforge.io
cups.online
All Cups – соревнования и задачи для IT-сообщества
Присоединяйся к нам и участвуй в крупнейших онлайн-соревнованиях, решай интересные задачи и открывай для себя новые знания в IT-сфере!
Как правильно писать сообщения коммитов в GIT, чтобы всем было хорошо
Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования для оптимизации процесса разработки.
https://proglib.io/p/kak-pravilno-pisat-soobshcheniya-kommitov-v-git-chtoby-vsem-bylo-horosho-2022-08-11
Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования для оптимизации процесса разработки.
https://proglib.io/p/kak-pravilno-pisat-soobshcheniya-kommitov-v-git-chtoby-vsem-bylo-horosho-2022-08-11
Библиотека программиста
👍 Как правильно писать сообщения коммитов в GIT, чтобы всем было хорошо
Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования…
Атака на String.hashCode: прообразы и коллизии
Требовалось ли вам получать наборы строк с коллизией по хеш-коду? Лично мне нет. Я в основном старался избегать коллизий, но чисто из "спортивного" интереса стоит прочитать эту статью.
https://habr.com/ru/post/674816/
Требовалось ли вам получать наборы строк с коллизией по хеш-коду? Лично мне нет. Я в основном старался избегать коллизий, но чисто из "спортивного" интереса стоит прочитать эту статью.
https://habr.com/ru/post/674816/
Хабр
Атака на String.hashCode: прообразы и коллизии
Как-то раз мне понадобилось несколько наборов строк с коллизией по хеш-коду. То есть таких, чтобы значение String::hashCode() совпадало для всех строк в наборе. Блуждание по интернету не дало...
Свой Spliterator
Многие из вас активно пользуются Stream API из Java 8, но не всем приходилось создавать свои Spliterator-ы. В статье очень хорошо разбирается процесс написания своего Spliterator-а. Мне особенно понравился пример создания для любой нестандартной коллекции (ещё пример — org.json.JSONArray), которая умеет быстро вернуть длину и элемент по порядковому номеру.
https://habr.com/ru/post/256905/
Многие из вас активно пользуются Stream API из Java 8, но не всем приходилось создавать свои Spliterator-ы. В статье очень хорошо разбирается процесс написания своего Spliterator-а. Мне особенно понравился пример создания для любой нестандартной коллекции (ещё пример — org.json.JSONArray), которая умеет быстро вернуть длину и элемент по порядковому номеру.
public class XmlStream {
static Stream<Node> of(NodeList list) {
return IntStream.range(0, list.getLength()).mapToObj(list::item);
}
}
https://habr.com/ru/post/256905/
Хабр
Пишем свой Spliterator
Многие из вас уже попробовали на вкус Stream API — потоки Java 8. Наверняка у некоторых возникло желание не только пользоваться готовыми потоками от коллекций, м...
Выпуск стандартной Си-библиотеки Cosmopolitan 2.0, развиваемой для переносимых исполняемых файлов
Этот пост не про Java. Извините, но я просто не удержался. Для меня она настоящее открытие.
Если вы думали, что только в Java возможна переносимость между разными операционными системами, то вы ошибались. Your build-once run-anywhere c library!!!
https://justine.lol/cosmopolitan/
Опубликован выпуск проекта Cosmopolitan 2.0, развивающего стандартную Си-библиотеку и универсальный формат исполняемых файлов, который можно использовать для распространения программ для разных операционных систем без использования интерпретаторов и виртуальных машин. Получаемый при помощи компиляции в GCC и Clang результат компонуется в статически связываемый универсальный исполняемый файл, который пригоден для запуска в любом дистрибутиве Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD и даже вызова из BIOS. Код проекта распространяется под лицензией ISC (упрощённый вариант MIT/BSD).
Контейнер для формирования универсальных исполняемых файлов основан на совмещении специфичных для разных операционных систем сегментов и заголовков (PE, ELF, MACHO, OPENBSD) в одном файле, комбинируя в нем несколько разных форматов, используемых в Unix, Windows и macOS. Для обеспечения запуска одного исполняемого файла в Windows и Unix-системах применяется трюк, связанный с кодированием файлов Windows PE в виде shell-скрипта, пользуясь тем, что Thompson Shell не использует маркер скриптов "#!". Для создания программ, включающих несколько файлов (компоновки всех ресурсов в один файл), поддерживается формирование исполняемого файла в виде специально оформленного ZIP-архива.
https://github.com/jart/cosmopolitan/releases/tag/2.0
Этот пост не про Java. Извините, но я просто не удержался. Для меня она настоящее открытие.
Если вы думали, что только в Java возможна переносимость между разными операционными системами, то вы ошибались. Your build-once run-anywhere c library!!!
https://justine.lol/cosmopolitan/
Опубликован выпуск проекта Cosmopolitan 2.0, развивающего стандартную Си-библиотеку и универсальный формат исполняемых файлов, который можно использовать для распространения программ для разных операционных систем без использования интерпретаторов и виртуальных машин. Получаемый при помощи компиляции в GCC и Clang результат компонуется в статически связываемый универсальный исполняемый файл, который пригоден для запуска в любом дистрибутиве Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD и даже вызова из BIOS. Код проекта распространяется под лицензией ISC (упрощённый вариант MIT/BSD).
Контейнер для формирования универсальных исполняемых файлов основан на совмещении специфичных для разных операционных систем сегментов и заголовков (PE, ELF, MACHO, OPENBSD) в одном файле, комбинируя в нем несколько разных форматов, используемых в Unix, Windows и macOS. Для обеспечения запуска одного исполняемого файла в Windows и Unix-системах применяется трюк, связанный с кодированием файлов Windows PE в виде shell-скрипта, пользуясь тем, что Thompson Shell не использует маркер скриптов "#!". Для создания программ, включающих несколько файлов (компоновки всех ресурсов в один файл), поддерживается формирование исполняемого файла в виде специально оформленного ZIP-архива.
https://github.com/jart/cosmopolitan/releases/tag/2.0
GitHub
Release Cosmopolitan v2.0 · jart/cosmopolitan
Cosmopolitan Libc makes C/C++ a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC to output a POSIX-appro...
Статический анализ кода в современной Java-разработке
Многостраничные гайды по оформлению кода, правильных инструментах и библиотеках по факту не работают. Люди в принципе не любят читать документацию. Автор статьи выражается более радикально по поводу таких гайдов ))
Выход из ситуации использовать различные автоматизированные средства валидация. В статье собрана неплохая подборка, которую однозначно стоит попробовать. Подключать ли все сложный вопрос. С одной стороны больше мнений по качеству кода, а с другой стороны замедление (доп. время на проверки). Нужно искать золотую середину. Я думаю, что если на одной чаше качество кода, а на другой скорость, то я скорее отдам большее предпочтение качеству, но возможно не каждый заказчик со мной согласится. Им нужно как всегда быстро и качественно )))
https://habr.com/ru/post/680018/
Многостраничные гайды по оформлению кода, правильных инструментах и библиотеках по факту не работают. Люди в принципе не любят читать документацию. Автор статьи выражается более радикально по поводу таких гайдов ))
Выход из ситуации использовать различные автоматизированные средства валидация. В статье собрана неплохая подборка, которую однозначно стоит попробовать. Подключать ли все сложный вопрос. С одной стороны больше мнений по качеству кода, а с другой стороны замедление (доп. время на проверки). Нужно искать золотую середину. Я думаю, что если на одной чаше качество кода, а на другой скорость, то я скорее отдам большее предпочтение качеству, но возможно не каждый заказчик со мной согласится. Им нужно как всегда быстро и качественно )))
https://habr.com/ru/post/680018/
Хабр
Статический анализ кода в современной Java-разработке
Привет, Хабр! Сегодня я хочу затронуть тему, которая будет полезна как Java-разработчикам, так и начинающим тех- и тимлидам. Я расскажу о том, как добиться высокого качества кода на вашем Java проекте...
JUnit расширение DbChange
Многие разработчики работают с приложениями взаимодействующими с базой. При написании интеграционных тестов для таких приложений могут возникать потребности: выполнять подготовку тестовых данных в базе, откатывать изменения, делать дополнительные проверки в базе.
Если вы пишите тесты с использованием JUnit, то стоит обратить внимание на замечательное расширение DbChange. При помощи него вы можете декларативно описать шаги взаимодействия с базой. Мне очень понравился такой подход. Рекомендую попробовать.
https://habr.com/ru/post/684692/
Многие разработчики работают с приложениями взаимодействующими с базой. При написании интеграционных тестов для таких приложений могут возникать потребности: выполнять подготовку тестовых данных в базе, откатывать изменения, делать дополнительные проверки в базе.
Если вы пишите тесты с использованием JUnit, то стоит обратить внимание на замечательное расширение DbChange. При помощи него вы можете декларативно описать шаги взаимодействия с базой. Мне очень понравился такой подход. Рекомендую попробовать.
https://habr.com/ru/post/684692/
Хабр
Введение в DbChange JUnit расширение
Простой и декларативный способ выполнять sql запросы в JUnit тестах. Введение Структура JUnit теста следует модели тестового сценария (test case): ПредУсловия (PreConditions) - это действия, которые...
Вышла Java 19
В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов.
https://habr.com/ru/post/689344/
В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов.
https://habr.com/ru/post/689344/
Хабр
Вышла Java 19
Вышла общедоступная версия Java 19 . В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов . Release Notes можно посмотреть здесь . Изменения API – здесь . Ссылки на скачивание: Oracle...
Обобщенное программирование – обзор реализаций
В статье дается довольно занимательное сравнение поддержки обобщенного программирования в C++, Java, C#(.Net). Наилучшего подхода не существует, любой подход – это всегда компромисс, при котором одними преимуществами жертвуют ради других.
https://habr.com/ru/company/piter/blog/656377/
В статье дается довольно занимательное сравнение поддержки обобщенного программирования в C++, Java, C#(.Net). Наилучшего подхода не существует, любой подход – это всегда компромисс, при котором одними преимуществами жертвуют ради других.
https://habr.com/ru/company/piter/blog/656377/
Хабр
Обобщенное программирование – обзор реализаций
В большинстве сильно типизированных языков поддерживается обобщенное программирование. Круг проблем, которые решаются на этих языках, один и тот же, но сами проблемы решались в разное время разными...
Better Java logging, inspired by Clojure and Rust
Недавно наткнулся на интересную статью про логирование. Там сравниваются подходы к логированию в Clojure, Rust и Java. Самое вкусное в этой статье - это попытка автора реализовать в Java более лучший способ логирования. Он в реализации использует новые фичи из последних версий Java и интересно проследить ход его мысли. Он по шагам добавляет новый функционал.
С практической точки зрения я не во всем согласен с автором. Особого профита от namespace-ов я особо не вижу. В моем представлении реализация получилась достаточно перегруженной и самое главное нет возможности отключить не нужные фичи. Возможно стоит доработать решение. Не нужно забывать еще и про GG. В частности в том же log4j есть режим "garbage free".
Про log4j есть режим "garbage free" - https://logging.apache.org/log4j/2.x/manual/garbagefree.html
https://mccue.dev/pages/9-25-22-better-java-logging
Недавно наткнулся на интересную статью про логирование. Там сравниваются подходы к логированию в Clojure, Rust и Java. Самое вкусное в этой статье - это попытка автора реализовать в Java более лучший способ логирования. Он в реализации использует новые фичи из последних версий Java и интересно проследить ход его мысли. Он по шагам добавляет новый функционал.
С практической точки зрения я не во всем согласен с автором. Особого профита от namespace-ов я особо не вижу. В моем представлении реализация получилась достаточно перегруженной и самое главное нет возможности отключить не нужные фичи. Возможно стоит доработать решение. Не нужно забывать еще и про GG. В частности в том же log4j есть режим "garbage free".
Про log4j есть режим "garbage free" - https://logging.apache.org/log4j/2.x/manual/garbagefree.html
https://mccue.dev/pages/9-25-22-better-java-logging
logging.apache.org
Log4j – Garbage-free Steady State Logging
Shift Left Approach for API Standardization
Как я уже писал в одном из прошлых постов разработчики не любят читать "длинных инструкций" и нужны автоматизированные средства проверки. С разработкой API тоже беда. Вы можете разработать стандарты и взять за основу Microsoft REST API Guidelines https://github.com/Microsoft/api-guidelines или Google API design guide https://cloud.google.com/apis/design/ или посмотреть примеры на API Stylebook http://apistylebook.com/ но чем больше мануал тем меньше вероятность что прочтут до конца и самое главное правильно поймут.
Решение: воспользоваться автоматизацией. Если разговор про OpenAPI, то есть целый класс инструментов линтеров https://nordicapis.com/8-openapi-linters/
В статье приводится пример для Zally. У данного инструмента есть также Gradle plugin. https://github.com/thiyagu06/zally-gradle-plugin
https://www.infoq.com/articles/shift-left-api/
Как я уже писал в одном из прошлых постов разработчики не любят читать "длинных инструкций" и нужны автоматизированные средства проверки. С разработкой API тоже беда. Вы можете разработать стандарты и взять за основу Microsoft REST API Guidelines https://github.com/Microsoft/api-guidelines или Google API design guide https://cloud.google.com/apis/design/ или посмотреть примеры на API Stylebook http://apistylebook.com/ но чем больше мануал тем меньше вероятность что прочтут до конца и самое главное правильно поймут.
Решение: воспользоваться автоматизацией. Если разговор про OpenAPI, то есть целый класс инструментов линтеров https://nordicapis.com/8-openapi-linters/
В статье приводится пример для Zally. У данного инструмента есть также Gradle plugin. https://github.com/thiyagu06/zally-gradle-plugin
https://www.infoq.com/articles/shift-left-api/
GitHub
GitHub - microsoft/api-guidelines: Microsoft REST API Guidelines
Microsoft REST API Guidelines. Contribute to microsoft/api-guidelines development by creating an account on GitHub.
Работа с проверяемыми исключениями при использовании Stream-ом
Я думаю, что многих из вас раздражают проверяемые исключения "всплывающие" при попытке выстроить "красивый код" со Stream-ами. Ряд библиотек приходят к нам на помощь и предлагают свои решения. В статье приводится пример проблемы и того как разные библиотеки предлагают ее решать. Решение предлагаемое в библиотеке Vavr мне кажется более полным так как позволяет в функциональном стиле описать в том числе и обработку исключения.
https://blog.frankel.ch/exceptions-lambdas/
Я думаю, что многих из вас раздражают проверяемые исключения "всплывающие" при попытке выстроить "красивый код" со Stream-ами. Ряд библиотек приходят к нам на помощь и предлагают свои решения. В статье приводится пример проблемы и того как разные библиотеки предлагают ее решать. Решение предлагаемое в библиотеке Vavr мне кажется более полным так как позволяет в функциональном стиле описать в том числе и обработку исключения.
https://blog.frankel.ch/exceptions-lambdas/
A Java geek
Exceptions in lambdas
Java introduced the concept of checked exceptions. The idea of forcing developers to manage exceptions was revolutionary compared to the earlier approaches. Nowadays, Java remains the only widespread language to offer checked exceptions. For example, every…
Настраиваем память JVM-приложения в Kubernetes
Я думаю, что многие из вас сталкиваются в работе либо с Kubernetes либо OpenShift и как известно там есть особенности в том сколько "видит" памяти ваше JVM приложение. В статье неплохо раскрывается эта тема и самое главное без лишней "воды". Также предлагается скрипт для автоматизации. Думаю, что в работе будет однозначно полезно.
https://habr.com/ru/company/domclick/blog/691240/
Я думаю, что многие из вас сталкиваются в работе либо с Kubernetes либо OpenShift и как известно там есть особенности в том сколько "видит" памяти ваше JVM приложение. В статье неплохо раскрывается эта тема и самое главное без лишней "воды". Также предлагается скрипт для автоматизации. Думаю, что в работе будет однозначно полезно.
https://habr.com/ru/company/domclick/blog/691240/
Хабр
Настраиваем память JVM-приложения в Kubernetes
Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на использование памяти ( limits.memory ), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение...
Apache Kafka 3.3 заменяет ZooKeeper новым протоколом консенсуса KRaft
Apache Software Foundation выпустила Apache Kafka 3.3.1 со множеством новых улучшений. В частности, это первый выпуск, который помечает протокол консенсуса KRaft (Kafka Raft) как готовый к промышленной эксплуатации.
KRaft — это протокол консенсуса, разработанный для управления метаданными непосредственно в Apache Kafka. Это значительно упрощает архитектуру Kafka, возлагая ответственность за метаданные на саму Kafka без необходимости использования стороннего инструмента, такого как Apache ZooKeeper. KRaft улучшает масштабируемость и отказоустойчивость разделов, а также упрощает развертывание Apache Kafka.
https://developer.confluent.io/learn/kraft/
Apache Software Foundation выпустила Apache Kafka 3.3.1 со множеством новых улучшений. В частности, это первый выпуск, который помечает протокол консенсуса KRaft (Kafka Raft) как готовый к промышленной эксплуатации.
KRaft — это протокол консенсуса, разработанный для управления метаданными непосредственно в Apache Kafka. Это значительно упрощает архитектуру Kafka, возлагая ответственность за метаданные на саму Kafka без необходимости использования стороннего инструмента, такого как Apache ZooKeeper. KRaft улучшает масштабируемость и отказоустойчивость разделов, а также упрощает развертывание Apache Kafka.
https://developer.confluent.io/learn/kraft/
Confluent
KRaft - Apache Kafka Without ZooKeeper
Apache Kafka Raft (KRaft) simplifies Kafka architecture by consolidating metadata into Kafka, removing the ZooKeeper dependency. Learn how it works, benefits, and what this means for Kafka's scalability.
Archunit инструмент автоматизации проверки качества архитектуры.
Сейчас все помешаны на автоматизации и стараются ее применить во всем. Я достаточно давно наткнулся на очень интересный проект Archunit. Использовать его для валидации промышленного кода пока не доводилось, но выглядит он достаточно интересно. Рекомендую обратить внимание.
https://archunit.org/
Сейчас все помешаны на автоматизации и стараются ее применить во всем. Я достаточно давно наткнулся на очень интересный проект Archunit. Использовать его для валидации промышленного кода пока не доводилось, но выглядит он достаточно интересно. Рекомендую обратить внимание.
https://archunit.org/
ArchUnit
Unit test your Java architecture
Start enforcing your architecture within 30 minutes using the test setup you already have.
The Polyglot Developer Reference
Недавно наткнулся на интересный инструмент позволяющий сравнивать возможности разных языков программирования. Как минимум можно сравнивать там разные версии Java, но сравнения возможностей Java с другими языками тоже достаточно интересны. Я думаю, что экосистему определяет не только синтаксис языка, но так же очень важную роль играют и доступные фреймворки и библиотеки. Думаю было бы интересно получить такое же сравнение для наиболее типовых кейсов. Например сравнение реализации типовых REST, gRPC и интеграций через Kafka.
https://codethesaur.us/
Недавно наткнулся на интересный инструмент позволяющий сравнивать возможности разных языков программирования. Как минимум можно сравнивать там разные версии Java, но сравнения возможностей Java с другими языками тоже достаточно интересны. Я думаю, что экосистему определяет не только синтаксис языка, но так же очень важную роль играют и доступные фреймворки и библиотеки. Думаю было бы интересно получить такое же сравнение для наиболее типовых кейсов. Например сравнение реализации типовых REST, gRPC и интеграций через Kafka.
https://codethesaur.us/
codethesaur.us
Code Thesaurus - Welcome
Code Thesaurus: A polyglot developer reference tool
VM Options Explorer
Chris Newland, один из авторов книги "Optimizing Java - Practical Techniques for Improving JVM Application Performance", создал ресурс на котором собрал информацию по опциям JVM и полезным ссылкам.
https://chriswhocodes.com/
Chris Newland, один из авторов книги "Optimizing Java - Practical Techniques for Improving JVM Application Performance", создал ресурс на котором собрал информацию по опциям JVM и полезным ссылкам.
https://chriswhocodes.com/
Chriswhocodes
VM Options Explorer - OpenJDK11 HotSpot
Может ли Java-приложение использовать больше памяти, чем размер кучи?
В этой статье хорошо раскрыта тема устройства памяти JVM. Также затронута тема инструментов диагностики и параметры JVM.
Лично для меня там была интересна тема про Native Memory Tracking.
https://habr.com/ru/company/otus/blog/705982/
В этой статье хорошо раскрыта тема устройства памяти JVM. Также затронута тема инструментов диагностики и параметры JVM.
Лично для меня там была интересна тема про Native Memory Tracking.
https://habr.com/ru/company/otus/blog/705982/
Хабр
Может ли Java-приложение использовать больше памяти, чем размер кучи
1. Введение Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области...