我一直收到的错误消息是:
位置 0x8 rip=0x10cf4ab28 的无效内存访问
我正在做的是制作一个基本的股票回测系统,即在最新的 Mac Os X 上使用 java + eclipse 在各种算法中迭代大量股票/历史数据。
我追踪了似乎导致它的代码。一种用于获取海量数据数组并被调用数千次的方法。没有任何东西被保留,所以我认为没有内存泄漏。但是,似乎有一个大约 7000 次的设定限制,我可以在出现内存错误之前对其进行迭代。
奇怪的是它在调试模式下完美运行。有谁知道 Eclipse 中的调试模式有何不同?
给 jvm 更多内存并没有帮助,而且使用 -xint 似乎可以正常工作。它再次在调试模式下完美运行。
public static List<Stock> getStockArray(ExchangeType e){
List<Stock> stockArray = new ArrayList<Stock>();
if(e == ExchangeType.ALL){
stockArray.addAll(getStockArray(ExchangeType.NYSE));
stockArray.addAll(getStockArray(ExchangeType.NASDAQ));
}else if(e == ExchangeType.ETF){
stockArray.addAll(etfStockArray);
}else if(e == ExchangeType.NYSE){
stockArray.addAll(nyseStockArray);
}else if(e == ExchangeType.NASDAQ){
stockArray.addAll(nasdaqStockArray);
}
return stockArray;
}
像这样的简单循环,迭代超过 1000 次,将导致内存错误。但不在调试模式下。
for (Stock stock : StockDatabase.getStockArray(ExchangeType.ETF)) {
System.out.println(stock.symbol);
}