아래의 것과 같이 4 개의 내부 루프를 사용하는 정적 메서드를 작성했습니다. 나는 실행될 때 사용 된 힙에 대해 많은 테스트를 해왔다. 그것은 수천과 수천 개의 "int []"객체를 생성하는 것으로 보이는데, 이것들은 내가 만든 루프에서 오는 것이라고 생각합니다.거대한 메모리가 여러 개의 내부 루프에 사용되었습니다.
이 메모리 문제를 해결할 방법이없는 것처럼 보입니다. 루프가 필요하지만 모든 루프에 대해 int [] 객체를 많이 만들 필요는 없습니다. 이러한 오류가 이러한 루프 자체에서 발생합니까? 그리고 메모리 사용량을 줄이기 위해 할 수있는 일이 있습니까? 루프 강화 기능을 고려 중이었습니다.하지만 같은 문제 일 수 있습니다 ...
고마워요!
public static double[] calculateHand(final int card1, final int card2, final int card3,
final int card4, final int card5)
{
int ahead = 0, tied = 1, behind = 2;
int[][] HP = new int[3][3];
int[] HPTotal = new int[3];
int ourrank = HandEval.hand5Eval(HandEval.encode(card1, card2, card3, card4, card5));
int[] remainingCards = filterCardsFromDeck(card1, card2, card3, card4, card5);
int kM = 1
for (int i = 0; i < remainingCards.length; i++)
{
for (int k = kM; k < remainingCards.length; k++)
{
int index = -1;
int oCard1 = remainingCards[i];
int oCard2 = remainingCards[k];
int opprank = HandEval.hand5Eval(HandEval
.encode(oCard1, oCard2, card3, card4, card5));
if (ourrank > opprank)
{
index = ahead;
}
else if (ourrank == opprank)
{
index = tied;
}
else
{
index = behind;
}
HPTotal[index]++;
int[] newArray = filter2Cards(remainingCards, oCard1, oCard2);
int riverMinimumIndex = 1;
for (int turnIndex = 0; turnIndex < newArray.length; turnIndex++)
{
for (int riverIndex = riverMinimumIndex; riverIndex < newArray.length; riverIndex++)
{
int turnCard = newArray[turnIndex];
int riverCard = newArray[riverIndex];
int ourbest = HandEval.hand7Eval(HandEval.encode7(card1, card2, card3, card4,
card5, turnCard, riverCard));
int oppbest = HandEval.hand7Eval(HandEval.encode7(oCard1, oCard2, card3, card4,
card5, turnCard, riverCard));
if (ourbest > oppbest)
{
HP[index][ahead]++;
}
else if (ourbest == oppbest)
{
HP[index][tied]++;
}
else
{
HP[index][behind]++;
}
}
riverMinimumIndex++;
}
}
kM++;
}
.....
return result;
}
분명히 '작동'비트가 무엇인지 보여줄 필요가 있습니다 ..... –
완료, 범인을 정확히 찾아 낼 수 없습니다. – skyllo
가능성이있는 행 : int [] newArray = filter2Cards (remainingCards, oCard1, oCard2); –