我有一段Java代码,其中包含while循环和递归。我们面临的问题是,在Unix服务器上调用下面的方法所需的时间几乎比Windows服务器上要慢8倍。有没有什么想法可以改进Unix服务器上的执行时间呢?我们正在使用JDK 1.6_43 [64位]。
protected Date abc(int n, Date date)
{
long tStart = System.currentTimeMillis();
if (n > 0)
{
while (n > 0)
{
--n;
date = getNextExchangeDateUnadjusted(date);
}
return date;
}
else
{
Date nextExchangeDate = getNextExchangeDateUnadjusted(date);
Date previousExchangeDate = getNextExchangeDateUnadjusted(date);
while (!abc( -n + 1, previousExchangeDate).equals(nextExchangeDate))
{
date = date.addDays( -14);
previousExchangeDate = getNextExchangeDateUnadjusted(date);
}
return previousExchangeDate;
}
}
编辑:
以下是调用上述getNextExchangeDateUnadjusted
方法的代码
public Date getNextExchangeDateUnadjusted(Date date) {
// Third Wednesday of each month
Date thirdWednesdayInMonth = date.getThirdWednesdayInMonth();
if (thirdWednesdayInMonth.after(date)) {
return thirdWednesdayInMonth;
}
return date.addMonths(1).getThirdWednesdayInMonth();
}
}
此外,我想补充的是代码在这一部分花费的时间最长:
while (!abc( -n + 1, previousExchangeDate).equals(nextExchangeDate))
{
date = date.addDays( -14);
previousExchangeDate = getNextExchangeDateUnadjusted(date);
}
编辑2:
随着进程的进行,我们在Unix服务器上进行了多次堆转储,并发现'Retained Heap'从约1mb增长到4.5mb,因此堆栈大小显著增加。不确定是否会导致性能变慢。我们现在将在Windows上进行堆转储,并尝试使用XSS更改堆栈大小。