Ответы пользователя по тегу Java
  • Имеется ли разница в мобильном Java приложении между double и int в JSON ответе?

    Vest
    @Vest
    Попробую ответить: если вы работаете с JSON, то стандарт говорит вам следующее:
    value:
        ...
        number
        ...

    Это то, что может быть в качестве одного из значений. Что такое number?

    number
        integer fraction exponent

    Или "целое", "(десятичный) разделитель" и "дробная часть".

    Как вы понимаете, никто вам ничего не гарантирует. Может быть будет точка, а может и нет. Всё, как в JavaScript. Поэтому, если у вас схема JSON'а неизвестна, то вы можете это трактовать как получится.

    Но если это "валюта" или что-то важное, где округление не допустим, то я бы попросил владельца API пересмотреть эту часть
    Ответ написан
    2 комментария
  • Как передать картинку телеграмм-боту?

    Vest
    @Vest
    Ошибка из-за того, что вы API не прочли. Если посмотреть на реализацию метода setChatId, то он возвращает void.
    public void setChatId(@NonNull Long chatId) {
    Ответ написан
    Комментировать
  • Можно ли везде использовать arraylist вместо array?

    Vest
    @Vest
    Array - это базовый тип, в котором элементы расположены строго друг за другом. Когда вы создаёте массив, то вы просите у ОС память такую, чтобы уместить все элементы "без разрывов". Поэтому такого рода вещи сложно динамически менять. Интересная особенность, длина массива не является частью типа.

    Поэтому чтобы такого не было, то есть другой тип данных (некоторая коллекция, которая ведёт себя как массив-список), там элементы можно вставлять хоть посередине, и вам как бы без разницы как это внутри создано. Но, этот объект гораздо сложнее обычного Array, поэтому в каких-то искусственных тестах он может быть медленнее.

    У ArrayList есть много "вкусных" методов, поэтому в основном люди пользуются именно им. Поэтому я согласен с предыдущим оратором - "да, можно использовать ArrayList везде". Я тоже не против :)
    Ответ написан
    3 комментария
  • Java. Тест производительности?

    Vest
    @Vest
    Я не знаю, полезен ли вам будет мой ответ, но я попробую его дать. Я попрофилировал проект в разных программах (Идея и VisualVM) на input.txt файле размером в 86 миллионов строк (просто взял ваш инпут, не разбираясь и наплодил порядка 900мб). Все профайлеры показывают два узких места - это ReadLine и split. Если вам это поможет, вот картинка:
    62c16bf2d7077786773526.png
    Если попрофилировать память, то она тоже выделяется (и съедается GC), то там две беды (дураки и дороги) byte[] и String.

    Я не вникал в задачу целиком, поэтому мой инпут файл конечно же липовый. Но я думаю, если вы сгенерируете что-нибудь большое и рандомное, то я смогу попрофилировать за вас. А пока из решений могу лишь предположить найти какую-нибудь другую альтернативу split для того, чтобы не плодить много мелких объектов.

    Кстати, тот сайт предлагает ограничить кучу до 128мб (-Xmx128M), может быть на их примере ваши ArrayList оказываются слишком затратными?
    Ответ написан
    Комментировать
  • Чем проанализировать огромный out of memory hprof?

    Vest
    @Vest
    До явы 9 был в своё время консольный инструмент jhat. Попробуйте им.
    Я знаю, что Оракл советует пользоваться VisualVM, можете им попробовать. Но я не знаю, как он себя поведёт. Не работал с ним в условиях ограниченной памяти.

    Извините, если мой ответ вам не подошёл. Я бы посоветовал вам уменьшить heap, и попробовать уронить яву ещё раз. Если вы анализируете утечку памяти, то она должна случиться и на меньших объёмах кучи. На худой конец, можете попрофилировать выделение памяти на работающей яве, чтобы узнать, кто выделяет столько мегабайт в куче.
    Ответ написан
    Комментировать
  • Spring @cachable не кеширует данные?

    Vest
    @Vest
    Короче, пришлось немного повозиться, чтобы создать проект, который мог бы воспроизвести вашу ситуацию. Простыми словами, ваш кеш всегда пуст потому, что третий параметр функции у вас постоянно меняется... Model.

    Каждый раз, когда вызывается POST, то создаётся объект Model и у него каждый раз новый адрес. Отсюда получается, что эта модель не может быть найдена в кеше.

    Ваш код можно починить, если указать ключ кеширования:
    @Cacheable(value = "sums", key = "{#A, #B}")

    Про формат ключа я узнал как обычно отсюда.

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

    Пожалуйста.
    Ответ написан
    Комментировать
  • Шифр Хилла на Java?

    Vest
    @Vest
    Я такие вещи ищу на github: https://github.com/search?l=Java&q=Hill+cipher&typ...
    Посмотрите, там около 40 проектов валяется, может быть подойдёт что.
    Ответ написан
    Комментировать