Ответы пользователя по тегу Java
  • Кушает ли память логирование?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Java медленно потребляет память даже в состоянии покоя. Видимо системные треды что-то аллоцируют. Я как-то создавал пустое main приложение которое стоит на паузе и на графике JVisualVM я наблюдал медленный рост Eden space. Попробуй тоже такой эксперимент.

    Вообще тебя это не должно беспокоить. Это нормальный цикл работы управляемой памяти. Главное что в тот
    момент когда срабатывает System.gc память быстро очищается без переноса объектов в Survival.

    Сам процесс логгирования тоже можно писать оптимально или не оптимально. Покажи исходники и хабр посмотрит что там можно улучшить. Здесь разные логгеры log4j, log4-2 могут использовать разные механики для оптимизации.
    Ответ написан
    1 комментарий
  • Как в Reactor запускать параллельные запросы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В том виде как ты написал - это классическое задание на мультипточность.
    Убери Mono. Используй Thread, Runnable, start, join

    Реактор здесь не нужен или его использование не мотивировано.
    Ответ написан
    1 комментарий
  • Для чего нужна аннотация @Serializable в либах Java/Kotlin?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С точки зрения Java language, аннотации ничего не делают. Они - как каменты в коде. Но они могут быть подсказками для фреймворков которые в compile time, classloader или runtime могут что-то выполнить над кодом. 99%
    это какие-то ORM/JSon подказки которые разъясняют фреймворку что делать. Например @Table(name="emp")
    подсказка JPA то класс относится к таблице emp.

    Ваш вопрос про либы Java/Kotlin слишком общий. Ничего конкретного нельзя сказать. Но по отношению к
    Serializable, можно предположить что это гарантия что класс можно сериализовать во внешнюю память
    (оперативная или диск) и это не нарушит никакой бизнес логики. Например это DTO которая полностью
    самодостаточная. Не все сущности вообще реально сохранить. Некоторые сущности - как орграф опутывают
    всю память Java и сохранять их накладно. Как корневой объект хипа. Дешевле дампнуть всю память чем
    сохранять такие объекты поштучно. Некоторые - имеют связи с внешними ресурсами Files/Sockets и вне контекста они не имеют смысла. Есть ключевые слова языка (transient) которые запрещают сериализацию для полей.
    Есть также проблема версионности для Serializable. Сохраненная структура не трекает ваши изменения
    по коду уже после того как вы что-то сохранили. Грубо говоря это не JSON. Если вставили новое поле - можете
    старый файл и не прочитать. В качестве маркера проблемы там заводят специальное поле типа versionId или
    что-то такое. Просто для детектирования.

    Если вы хотите иметь тотальный контроль над сохранением - то определяйте Externalizable и там будут 2
    метода в которых вы контролируете Output/Input streams и сами пишете что сохранять и читать. А еще
    лучше брать библиотеки Kryo/Protobuf/Avro e.t.c. У них еще и есть оптимизации по скорости и по сжатию.
    Вы к этому придете эволюционным путем если будете писать систему где сохранение во вне - важно.

    Сериализация во внешнюю память это огромная проблема когда мы пытаемся подружить разные
    технологии (32-64 бит целые числа или разный порядок байт в машинном слове). Даже простое
    сохранение даты или строки может быть ошибочным если вы сохранили в Java а пытаетесь читать в C++.
    Нужна 100% бинарная совместимость всех структур. Вот библиотеки Протобуф и Авро
    как раз для этого создавались.
    Ответ написан
    Комментировать
  • Почему в Java изменение интерфейса базового класса посредством модификации сигнатуры разрешено?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Несмотря на то что java/c++ формально являются ООП языками, многие вещи
    с перегрузкой у них реализованы по разному. В случае с методом sound в Java
    скорее всего будет создано просто 2 метода (разные сигнатуры).
    Ответ написан
  • Как я могу конвертировать число в символ?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    System.out.println((char)3);

    Так не надо делать. Это получение Unicode символа по коду 3.
    Оно сработает но с точки зрения code-review некрасиво и твоя команда
    будет тебя бить и чморить за такой способ кастинга.

    В java есть специальные литералы для работы с кодировками.
    Например для символа с кодом 3 (однобайтного типа ASCII)
    '\x03'
    Или например для кириллической буквы А в кодировке UTF-16
    '\u0430'
    Ответ написан
    3 комментария
  • Используем kafka + spring boot, периодически listener перестает получать сообщения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    На производительность кафки влияет 4 сущности. Конфиг брокера, продюсера, консюмера и message configuration.
    Очень сложно разбираться в том что у тебя происходит на основании такого странного теста. Скажи
    сколько времени ты ждал этого загадочного listener. Как ты ждал. В какой лог смотрел. Почему
    ты вообще решил что это проблема. Может продюсер ничего не производит. Короче дай картину
    происходящего более подробную.
    Ответ написан
    2 комментария
  • Как сделать, чтобы приложение Java с классом Robot работало в проекте STALCRAFT?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Поскольку в хабре нет тега майнкрафт и плагины - то мы можем обсуждать только Java.
    Давай код и лог с ошибками. Там уже по ходу жизни будем смотреть.
    Ответ написан
  • Как решить проблему ограничения кол-ва символов в SOLR?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Интересно. Вот тут пишут про похожий инцедент https://stackoverflow.com/questions/24019868/utf8-...
    Ответ написан
    Комментировать
  • Зачем использовать FileWriter?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ну если открыть описание API то там достаточно четко описано.

    Object
     +- Writer (Abstract class for writing to character streams.)
         +- OutputStreamWriter (An OutputStreamWriter is a bridge 
              |                 from character streams to byte streams)
              +- FileWriter (Writes text to character files using a default buffer size.)


    Последний - буферизированный.
    Ответ написан
    6 комментариев
  • "прикладной код Java" - это что?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В тексте вопроса написано много чепухи. Java может использовать внешнюю память. Кажется еще
    в Java 8 для Apache Ignite (и других NoSQL систем) были попытки использовать неуправлямую
    память через ByteBuffer. История где-то об этом сохранилась я думаю.

    Начиная с JDK-14 (могу ошибаться) завезли Foreign Memory API который оперирует с памятью
    более продвинуто.

    По поводу
    в Java не надо следить за памятью

    - неправда. Следить за памятью надо всегда. Иногда это делает разработчик (для С/C++)
    а иногда это делает GC или умные механизмы borrow-checker (Rust).
    Если не следить то долго работающие процессы пожирают всю память ОС
    до тех пор пока не будут убиты через ОС OOM killer. Возможно под слежением
    имелись в виду накладные расходы на работу GC? Но эта проблема специфична
    только для приложений которые активно делают new и переживают хотя-бы одну
    эпоху. Кроме того в Java есть несколько разных GC которые просто обнуляют
    все тезисы например 2000х годов и обсуждать их надо уже совсем как другие
    алгоритмы которые имеют другие свойства. Грубо говоря знания по GC очень
    сильно устарели после G1, Shennandoh e.t.c. Нужно учить заново всё.

    прикладной код Java - заменить на “прикладной код движка Java”

    Это вообще невозможно прокомментировать т.к. идет жонглирование терминами без
    определений. Что такое движок в данном случае - непонятно?

    В любом случае тебе надо звать в студию этого загадочного Романа и не плодить свои домыслы.
    Ответ написан
    2 комментария
  • Как запустить Processing (Java) код при уже запущенной программе?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Есть несколько способов это сделать.

    Использовать встроенную в Java машину Nashorn которая по идее реализует JavaScript. Там такое можно сделать.

    Подключиться дебаггером к приложению запущенному в debug mode. Там по идее тоже можно выполнять какие-то команды на вычисление выражений и видеть результат.

    Но сама идея влезать в работающее приложение - не очень хорошая идея. С точки зрения безопасности и надежности. Возможно те вещи что ты хочешь могут быть закрыты через Logging или JMX или заранее протестировать все кейсы JUnit тестами в оффлайне. Сам факт того что ты хочешь чего-то в runtime говорит
    о нехватке тестового покрытия.

    Еще посмотри на jschell. Может пригодится.
    Ответ написан
  • Решить проблему This class should provide a default constructor (a public constructor with no arguments)?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Добавь такой конструктор.

    public AlarmService() {
            super();
     }
    Ответ написан
    Комментировать
  • Какой пет проект можно реализовать на Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я делал себе такие проекты типа - индексирование текстовых фалов в /My Documents. Или раскладывание фоток по датам фотоснимков на основе exif тегов.

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

    Почему я давлю на результат и на приёмку? Потому что 99% таких проектов успешно начинаются и потом забрасываются потому что человек выгорает еще на старте. Чтоб не выгорать - нужно ТЗ. Нужел девелопмент план. И нужен хоть какой-то человек который взглянет на результат.

    Если этого нет - пет-проект уйдет на свалку истории. Как впрочем и большая часть контента github. Это унылые копи-пасты, туториалы и незаконченные произведения.
    Ответ написан
    1 комментарий
  • Как из Flux собрать массив JSON?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    При чем здесь Flux и Mono к JSON? Это разные уровни смыслов. А если-бы ты c XML работал? Ты явно указываешь getObjectsAsFlux зачит и будел флюкс. А если тебя смущает массив внутри респонса то оберни его объектом и будет тебе всегда объект.
    Ответ написан
  • Как в респонсе на ходу создавать объект?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тут описана проблема которая принципиально в Rest-сервисах не решена до сих пор.

    Ее коробочное решение было реализовано в GraphQL. Но GraphQL - это не Rest. Это более
    сложный и более умный протокол и он позволяет выбирать из entity ровно те поля
    которые нужны для responce.

    А в твоем случае надо просто в контроллере создать еще один метод. Типа getUserByIdShort
    Ответ написан
    Комментировать
  • Какие виды и специализации Java программистов бывают?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Самая правильная специализация выставляется работодателем. Вот туда и надо смотреть.
    Откройте местную газету вакансий для Java. И через 2-3 часа чтения у вас будет самая
    правильная классификация или номенклатура или бох еще какая категоризация
    джавистов.

    А что вы здесь еще хотели узнать? Про формы черепов? Или про партийную принадлежность джавистов?
    Ответ написан
  • Какую книгу взять новичку в разработке микросервисов на Spring Framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я не понимаю зачем такое ограничение в названии топика?
    Микросервисы и Spring - это как езда на лошади только галопом.
    Или рыбалка только для пресноводных рыб.
    Ответ написан
    Комментировать
  • Какую книгу по Java выбрать новичку с небольшим опытом на другом языке?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Алгоритмы брать не надо. Седжвик вообще писал не про Java а только про алгоритмы.
    У него - целое семейство книг такого вида. Сначала Алгоритмы на С. Потом на C++ И потом Java. Он по сути портировал исходники. Какой толк вам в таком портировании?

    А Хорстман, Эккель - вполне себе норм.
    Ответ написан
    Комментировать
  • Какова синтаксическая ошибка MySQL?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Наверное не value а values
    INSERT INTO books (title, author, price, quantity) values
    Ответ написан
  • Критика кода возможна?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тут вместо цепочки if можно switch-case использовать.

    @Override
        public void notification(Event event) {
            if (event.type() == EventType.REDRAW_REQUEST) {
                printField(event.field());
                return;
            }
    
            if (event.type() == EventType.BOMB_OPENED) {
                System.out.println("You opened bomb. Game failed");
                printField(event.field());
            }

    И в других местах - похожие косяки.
    Ответ написан
    Комментировать