Java полезное использование сборщика мусора

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

Должен ли я остаться "=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;
}

3 ответа

Решение

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

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

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

Я предлагаю вам подумать, как можно изменить свой код, чтобы удалить создание мусора.

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

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

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

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

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

Другие вопросы по тегам