Быстрее чем конструктор? - PullRequest
4 голосов
/ 28 февраля 2012

Я настраиваю производительность некоторого Java-кода, который должен создать несколько тысяч объектов в спешке. Я рассмотрел некоторые очевидные вещи, например, убедившись, что объекты достаточно просты, а конструктор скуден и подл. И я также смотрю на варианты, чтобы обойтись без некоторых объектов и т. Д.

Могу ли я обратить особое внимание на то, чтобы сам конструктор занимал меньше времени? Есть ли другой способ получить нужное количество объектов без вызова конструктора, возможно, с использованием clone() или другого API времени выполнения вместо этого? Или есть подсказки, которые я мог бы дать ВМ или компилятору, чтобы помочь упростить эту часть программы?

Ответы [ 5 ]

1 голос
/ 28 февраля 2012

Лучший способ - максимально избегать создания объектов.Мало того, что создание объектов имеет свою стоимость, но и очистка их впоследствии сборщиком мусора.

Некоторые идеи могут быть такими: попробуйте вместо этого сжать ваши данные в примитивные типы, заменив простые структурные объекты на предварительно выделенные.параллельные массивы простых типов, делайте ваши объекты изменяемыми, сбрасывайте их и повторно используйте их, когда они больше не нужны (с использованием пула или ad-hoc), используйте Javolution для размещения структуроподобных данных в предварительно распределенных ByteBuffers / массивах.Если вам нужно создавать новые объекты, избегайте коллекций Java - у них много накладных расходов (как в использовании памяти, так и в распределении объектов), попробуйте вместо этого использовать массивы или Trove.

Возможно, вы также можете упростить свою логику, чтобы выВо-первых, вам не нужно так много объектов.

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

0 голосов
/ 28 февраля 2012

Можете ли вы идти параллельно, или процесс раскручивания / синхронизации потока в вашей системе управления занимает больше времени, чем затраты на создание, которые вы пытаетесь минимизировать?

0 голосов
/ 28 февраля 2012

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

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

0 голосов
/ 28 февраля 2012

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

0 голосов
/ 28 февраля 2012

Вы можете взглянуть на шаблон , чтобы разделить некоторые данные между объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...