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;
}
4

3 回答 3

1

如果你担心垃圾,我建议你一开始就不要创造那么多。使用原语而不是对象,大约一半的垃圾会消失。此外,您也不需要清除即将超出范围的字段。运气好的话,JIT 足够聪明,可以删除做任何事情的代码。

这是一个软实时系统。

对于高频交易系统,我的目标是平均每次价格变动创建少于一个对象。这导致几乎没有垃圾产生或需要清理。

我建议您考虑如何更改代码以消除垃圾创建。

于 2013-09-12T08:29:11.860 回答
0

对对象的引用范围仅限于方法的范围。因此,在方法结束时调用null不会改变任何东西。

此外,传递参数通常是一种很好的做法,final以表明不重新影响方法内的引用的意图,从而使代码更具可读性。这样做实际上会阻止您调用= null参数。

于 2013-09-12T08:09:46.220 回答
0

考虑到您已经将对象分配给其他变量,这是毫无意义的。

因此,是否将参数分配给 null 无关紧要,因为对象的实例变量已经指向参数变量已经指向的数据。

哦,我差点忘了,如果你传递的参数也已经在某个地方引用了怎么办?基本上,在您的建设性完成执行后,您的参数将超出范围,因此对您正在做的事情没有影响。好吧,除了让你的代码看起来很难看......并且可能会在每日 WTF 中发布。

于 2013-09-12T08:08:12.613 回答