jvmchat | Unsorted

Telegram-канал jvmchat - pro.jvm

5916

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез

Subscribe to a channel

pro.jvm

Я ниже чем Java 6 (1.6) никогда не опускался, но даже тогда использовался StringBuilder. Но да, сейчас посмотрел, всё же в некоторых местах байт-код меняется

Читать полностью…

pro.jvm

Что на 8-й, что на 25-й везде StringBuilder, разве нет?

Читать полностью…

pro.jvm

Теоретически там вообще может быть свой Arrays с другим asList в рантайме, но это дичь, безусловно.

Читать полностью…

pro.jvm

Я думаю, что конкретно здесь не очень тривиально доказать, что список всегда будет с одним и тем же содержимым, несмотря на то, что для человека это очевидно. Но джавац вроде как действительно фолдит только low hanging fruit, остальное отдается на откуп джиту, который местами может сделать те же вещи, но на основе не только статической информации, но и профиля (тупой пример: константа, которая резолвится в рантайме, может быть заинлайнена в метод, это конечно не фолдинг, но я просто привожу пример, почему это в некотором роде двойная работа)

Читать полностью…

pro.jvm

https://shipilev.net/jvm/anatomy-quarks/18-scalar-replacement/

Читать полностью…

pro.jvm

Разве может? Вальхала еще не приехала

Читать полностью…

pro.jvm

Компилятор может перенести аллокацию полей List на стек, но все равно остается вложенный массив. Лучше писать стандартный код, с иммутабельными объектами в static final полях

Читать полностью…

pro.jvm

Кажется, что это вполне себе compile-time оптимизация, нет?

Читать полностью…

pro.jvm

А javac не умеет в constant folding для непримитивов? Например, в таком куске я бы не хотел чтоб каждый раз пересоздавался лист:

public boolean isDone() {
return Arrays.asList(Status.COMPLETED, Status.FAILED
)
.contains(this.status)
;}

Читать полностью…

pro.jvm

@android_ru

Читать полностью…

pro.jvm

да пойдет, но надо опять приседания делать.А посмотрели недавно на spring cloud, и кажется, что их можно вообще не делать

Читать полностью…

pro.jvm

у нас уже есть своя реализация сервиса для публичного API, где происходит аутентификация/авторизация, прикручен гибкий рейт-лимитинг и трассировка.
Из плюсов, что свое решение всегда можно самостоятельно расширить/дополнить.
Из минусов
- приходится писать кучу бойлерплейта, суть которого в проксировании запроса во внутренний сервис и трансляции респонса от него
- сервис комунальный, пишут в него разные команды, со временем могут напихать туда лишней логики и превратить его в помойку
- сервис блокирующий, замедление обработки в одном из внутренних сервисов может привести к исчерпанию пула потоков для обработки новых запросов
Эти минусы spring cloud закрывает хорошо.
В рейт-лимит он вроде тоже умеет, в трассировку вроде тоже

Читать полностью…

pro.jvm

меняешь на другой гейтвей типо конга и все

Читать полностью…

pro.jvm

ну то есть максимум подкачать из бд какие-то роли и чисто эндпоинты ограничивать и всё, а остальное что-то более сложное уже прописывать в контроллерах и там уже через бд напрямую проверять что-то, так?

Читать полностью…

pro.jvm

которое и достук к апи выдает различным клиентам/рэйтлимиты/статистика/биллинг и тд и тп

Читать полностью…

pro.jvm

Нет, и стрингбилдер наверное не сразу появился (тогда ещё джава в моей жизни не появилась, Так что я не знаю), с девятки у нас StringConcatFactory с помощью invokedynamic. Собственно --release плюс-минус для/из-за этого и существует

Читать полностью…

pro.jvm

Здесь не догнал. По идее разный javac и должен выдавать разный байткод, так у нас конкатенация строк получает разные имплементации

Читать полностью…

pro.jvm

Просто потому что нет такой оптимизации? Можете же сами скомпилировать и проверить. Потенциально подобные оптимизации могут сломать трансформеры байт-кода, когда у вас меняется байт-код (за исключением его версии) в зависимости от версии javac - не круто.

UPD: Компилятор сам по себе не может наверняка знать насколько критичная оптимизация, а что если вызов Arrays#asList будет очень важен для вас? В одном кейсе нет, в другом да, потому компилятор и не будет переписывать за вас код.

Читать полностью…

pro.jvm

https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/StringLatin1.java#L304

Поч здесь сразу без раздумий не дропнули arraycopy()?

Читать полностью…

pro.jvm

Если ссылка на созданный объект не покидает локальный скоуп, то может

Читать полностью…

pro.jvm

Почему? Во многих языках это оптимизация именно компилятора

Читать полностью…

pro.jvm

Нет, в compile-time таких оптимизаций нет. Компилятор может удалить мёртвый код, может сгенерировать байт-код, который не совсем соответствует коду (но логически всё останется так-же), но откровенно "плохой код" он за вас не перепишет

Читать полностью…

pro.jvm

javac нет, но JIT вполне может оптимизировать тут, если посчитает нужным

Читать полностью…

pro.jvm

Я реализовал через абстрактный конвеер с дженериком
и аннотацию - а реализацию как раз доверил JavaModule.

Спасибо.
В итоге сократил код до одной строчки над классом.

Читать полностью…

pro.jvm

Привет, простите заранее за тупой вопрос.
Вопрос связан с градлом и подключением как я понял плагинов из ноды.

В проекте добавляются плагины через плагин менеджер, из node_modules (и да оно существует, я заранее проверил)

pluginManagement {
def reactNativeGradlePlugin = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })")
}.standardOutput.asText.get().trim()
).getParentFile().absolutePath
includeBuild(reactNativeGradlePlugin)

def expoPluginsPath = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })")
}.standardOutput.asText.get().trim(),
"../android/expo-gradle-plugin"
).absolutePath
includeBuild(expoPluginsPath)
}

Потом как я понял плагины учитываются и инициализируются

plugins {
id("com.facebook.react.settings")
id("expo-autolinking-settings")
}

extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> ex.autolinkLibrariesFromCommand()
// if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {
// ex.autolinkLibrariesFromCommand()
// } else {
// ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)
// }
}

И потом я вижу что оно не находит плагины (после очистки кеша и удаление всех зависимостей и снова их установкой, ничего не помогло)

Читать полностью…

pro.jvm

а секет брейкер не пододет тут?

Читать полностью…

pro.jvm

в общем думаю когда применять, когда нет

Читать полностью…

pro.jvm

кто как, задача то какая?

Читать полностью…

pro.jvm

Получаешь роли из сесурити, проверяешь/фильтруешь сам

Читать полностью…

pro.jvm

спринг клауд решение очень примитивное, если сравнивать с коробкой

Читать полностью…
Subscribe to a channel