Re: java.lang.OutOfMemoryError: Java heap space
"Goofball" <yuriytkach@gmail.com> wrote or quoted in
Message-ID: <1162197003.272982.154550@m73g2000cwd.googlegroups.com>:
---------- snip -------------
private List<ArrElem> arr = new ArrayList<ArrElem>();
private Map<ArrElem, Collection<ArrElem>> rez = new HashMap<ArrElem,
Collection<ArrElem>>();
public void processArr() {
//fillArr(10000);
for (int i = 0; i < 10000-1; i++) {
for (int j = i+1; j < 10000; j++) {
compareElements(arr.get(i), arr.get(j));
}
}
}
It is mere guesswork.
The above code calls 'compareElements' (10000 * 10000) times.
Namely, 100 M times.
private void compareElements(ArrElem elem1, ArrElem elem2) {
int bitM = elem1.getFp().cardinality();
int bitN = elem2.getFp().cardinality();
BitSet commonBits = elem1.getFp();
commonBits.and(elem2.getFp());
int bitCommon = commonBits.cardinality();
double index = bitCommon/(bitM+bitN+bitCommon);
Min of 'index' is 0.
Max of 'index' is smaller than 1.
if (index < 0.8) {
If 'cardinality()' is random,
the probability of calling the bellow code will be about 8/10.
That is, 80 M times (10000 * 10000 * 0.8)
if (! rez.containsKey(elem1))
rez.put(elem1, new ArrayList<ArrElem>());
rez.get(elem1).add(elem2);
}
}
}
The above code adds an element to 'rez' whenever she is executed.
A total of 80 M elements.
320 MBytes memory (80M * 4) will be required at least.