Как Вы делаете свою память JAVA-приложения эффективной?

Как правило, автозаполнение сильно зависит от типа информации.

Причина IDE не говорит вам, какой метод или поле данных у него есть, потому что:

  1. Если тип не может быть получен во время компиляции (или «до выполнения»), IDE не знает, что это такое.

  2. На самом деле IDE может выполнять автозаполнение, если оно сканирует все возможные пути, но это не имеет смысла, производительность будет очень плохой.

После python 3.5 мы можем указать тип возвращаемого метода. Если matplotlib добавляет подсказку типа, IDE может поддерживать автозаполнение.

Кстати, причина, по которой IDE нуждается в индексации файла при первой загрузке проекта, заключается в том, что он должен анализировать исходный код и получать информацию о типе.

17
задан Boune 29 April 2009 в 04:23
поделиться

10 ответов

Вы не говорите, какие объекты вы Ищете в магазине, поэтому немного сложно дать подробный совет. Однако некоторые (не исключительные) подходы в произвольном порядке:

  • Использовать образец веса в полете везде возможно.
  • Кэширование на диск. Есть многочисленные решения для кэширования Ява.
  • Есть некоторые споры относительно того, String.intern хорошая идея. Видеть здесь для вопроса re. String.intern () и количество споры о его пригодности.
  • Используйте soft или слабый ссылки для хранения данных, которые вы можете воссоздать / перезагрузить по требованию. Видеть здесь о том, как использовать софт ссылки на методы кеширования.

Знание большего количества внутренних элементов и времени жизни сохраняемых вами объектов приведет к более подробному ответу.

17
ответ дан 30 November 2019 в 10:20
поделиться

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

Вы можете посмотреть на изменение представления ваших данных, особенно если ваши объекты маленькие. Например, вы можете представить таблицу данных в виде серии столбцов с массивами объектов для каждого столбца, а не по одному объекту в строке. Это может сэкономить значительные накладные расходы для каждого объекта, если вам не нужно представлять отдельную строку. например, таблица с 12 столбцами и 10 000 000 строк может использовать 12 объектов (по одному на столбец), а не 10 миллионов (по одному на строку)

20
ответ дан 30 November 2019 в 10:20
поделиться

Обеспечьте хорошую нормализацию вашей объектной модели, не дублируйте значения.

Гм, и, если это всего лишь миллионы объектов, я думаю, я бы просто выбрал приличную 64-битную ВМ и много барана;)

11
ответ дан 30 November 2019 в 10:20
поделиться

Обычные «профилировщики» не сильно вам помогут, потому что вам нужен обзор всех ваших «живых» объектов. Вам нужен анализатор дампа кучи. Я рекомендую анализатор памяти Eclipse .

Проверьте наличие дублированных объектов, начиная со строк. Проверьте, можете ли вы применять шаблоны, такие как flightweight, copyonwrite, lazy initialization (Google будет вашим другом).

4
ответ дан 30 November 2019 в 10:20
поделиться

Я хочу добавить кое-что к тому, что сделал Питер Алреди (не может прокомментировать его ответ :(), всегда лучше использовать профилировщик памяти (проверьте java memory profiler ]), чем следовать интуиции. В 80% случаев мы игнорируем рутину, в которой есть некоторые проблемы. Также классы коллекций более подвержены утечкам памяти.

1
ответ дан 30 November 2019 в 10:20
поделиться

Вы можете просто хранить меньше объектов в памяти. :) Используйте кэш, который проливается на диск, или используйте Terracotta для кластеризации вашей кучи (которая является виртуальной), позволяя неиспользуемым деталям быть выгруженными из памяти и прозрачно возвращать их обратно.

2
ответ дан 30 November 2019 в 10:20
поделиться

Необычное: держите большинство данных сжатыми в оперативной памяти. Разверните только текущий рабочий набор. Если ваши данные имеют хорошую локализацию, которая может хорошо работать.

Используйте лучшие структуры данных. Стандартные коллекции в java довольно требовательны к памяти.

[что является лучшей структурой данных]

  • Если вы посмотрите на источник для коллекций, вы увидите, что если вы ограничите свой доступ к коллекции, вы можете сэкономить место на элемент.
  • Способ выращивания коллекции не годится для больших коллекций. Слишком много копий. Для больших коллекций вам нужен некоторый блочный алгоритм, например btree.
0
ответ дан 30 November 2019 в 10:20
поделиться

If you have millions of Integers and Floats etc. then see if your algorithms allow for representing the data in arrays of primitives. That means fewer references and lower CPU cost of each garbage collection.

1
ответ дан 30 November 2019 в 10:20
поделиться

Потратьте некоторое время на ознакомление и настройку команды VM параметры строки , особенно те, которые касаются сбора мусора. Хотя это не изменит память, используемую вашими объектами, это может сильно повлиять на производительность приложений с интенсивным использованием памяти на компьютерах с большим объемом оперативной памяти.

0
ответ дан 30 November 2019 в 10:20
поделиться
  1. Назначить null для всех переменных , которые больше не используются . Таким образом, делает его доступным для сборки мусора .
  2. Отмените ссылку на коллекции после завершения использования, иначе сборщик мусора не очистит их.
0
ответ дан 30 November 2019 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: