2013-09-12 3 views
0

В заголовке функции я такая ситуация:ява полезно использование сборщика мусора

Должен ли я остаться в «= NULL» в конце концов, или Java при выходе из функции сделать это самостоятельно?

Мое намерение - сделать это как можно скорее, готовым к сбору мусора. Это мягкая система реального времени.

public BulkDataResponse(Double closePrice, Integer closeTime, Integer cmd, 
     String comments, Double commission, Integer digits, 
     Integer errorCode, Integer expiration, String login, 
     Integer magic, Double openPrice, Integer openTime, 
     Integer positionOrder, Double profit, Double rateClose, 
     Double rateMargin, Double rateOpen, Integer sourceId, 
     Double stopLoss, Double swap, String symbol, Double takeProfit, 
     Double taxes, Integer timeTick, Double volume) 
{ 
    super(); 
    this.closePrice = closePrice; 
    this.closeTime = closeTime; 
    this.cmd = cmd; 
    this.comments = comments; 
    this.commission = commission; 
    this.digits = digits; 
    this.errorCode = errorCode; 
    this.expiration = expiration; 
    this.login = login; 
    this.magic = magic; 
    this.openPrice = openPrice; 
    this.openTime = openTime; 
    this.positionOrder = positionOrder; 
    this.profit = profit; 
    this.rateClose = rateClose; 
    this.rateMargin = rateMargin; 
    this.rateOpen = rateOpen; 
    this.sourceId = sourceId; 
    this.stopLoss = stopLoss; 
    this.swap = swap; 
    this.symbol = symbol; 
    this.takeProfit = takeProfit; 
    this.taxes = taxes; 
    this.timeTick = timeTick; 
    this.volume = volume; 

    closePrice = null; 
    closeTime = null; 
    cmd = null; 
    comments = null; 
    commission = null; 
    digits = null; 
    errorCode = null; 
    expiration = null; 
    login = null; 
    magic = null; 
    openPrice = null; 
    openTime = null; 
    positionOrder = null; 
    profit = null; 
    rateClose = null; 
    rateMargin = null; 
    rateOpen = null; 
    sourceId = null; 
    stopLoss = null; 
    swap = null; 
    symbol = null; 
    takeProfit = null; 
    taxes = null; 
    timeTick = null; 
    volume = null; 
} 
+1

Это работа сборщика мусора, а не ваша. Кроме того, если вы хотите пометить объект как подходящий для сбора мусора, просто установите переменную как «null», а не ее поля. –

+0

* «Должен ли я оставаться в конце« = null »в конце» * - Нет, я уверен, что это не будет иметь абсолютно никакого эффекта, поскольку вы назначили ссылку на (я предполагаю переменные экземпляра), которые теперь имеют сильную ссылку на значения, которые вы передали конструктору. Даже если вызывающая сторона 'null 'их ссылки, пока есть сильная ссылка на ваш экземпляр' BulkDataResponse', значения не будут GC'ed – MadProgrammer

+0

Возможный дубликат [Назначает объекты для null в сборке мусора Java-мусора ?] (http://stackoverflow.com/questions/449409/does-assigning-objects-to-null-in-java-impact-garbage-collection) и http://stackoverflow.com/questions/2931170/does- переменный-нуль-множество-это-для-сборка мусора – paulsm4

ответ

1

Если вы беспокоитесь о мусоре, я предлагаю вам не создавать так много в первую очередь. Используйте примитивы вместо объектов, и примерно половина вашего мусора исчезнет. Также вам не нужно очищать поле, которое все равно выйдет за рамки. В любом случае JIT достаточно умен, чтобы удалить код, который ничего не делает.

Это мягкая система реального времени.

Для высокочастотной торговой системы моя цель - создать в среднем менее одного объекта за движение цены. Это приводит к тому, что почти не образуется мусор или его нужно очищать.

Предлагаю вам рассмотреть возможность изменения кода для удаления мусора.

0

Это довольно бессмысленно, учитывая, что вы уже присвоили объектам другие переменные.

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

О, и я почти забыл, что, если параметры, которые вы передали, уже упоминаются где-то также? В основном ваши параметры выйдут из сферы действия после того, как ваше конструктивное завершение будет выполнено, чтобы не было никакого эффекта на то, что вы делаете. Ну, за исключением того, что ваш код выглядит уродливым ... И может быть опубликован в ежедневной WTF.

0

Объем ссылок на объекты ограничен областью применения метода. Поэтому вызов null в конце метода ничего не изменит.

Кроме того, как правило, правильная практика состоит в том, чтобы ваши аргументы передавались как final, чтобы показать намерение не повторно влиять на ссылки внутри метода, что делает код более удобочитаемым. Это фактически помешает вам вызвать = null по аргументам.

Смежные вопросы