私が一貫して得ているエラーメッセージは次のとおりです。
ロケーション 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;
}
このような単純なループを何千回も繰り返すと、メモリ エラーが発生します。ただし、デバッグ モードではありません。
for (Stock stock : StockDatabase.getStockArray(ExchangeType.ETF)) {
System.out.println(stock.symbol);
}