Ich bekomme Leistungsprobleme rund 61 Millionen Elemente.
import java.util.*;
public class BreakingMaps{
public static void main(String[] args){
int count = Integer.MAX_VALUE>>5;
System.out.println(count + " objects tested");
HashMap<Long, String> set = new HashMap<>(count);
for(long i = 0; i<count; i++){
Long l = i;
set.put(l, l.toString());
}
Random r = new Random();
for(int i = 0; i<1000; i++){
long k = r.nextInt()%count;
k = k<0?-k:k;
System.out.println(set.get(k));
}
}
}
Ich betreibe das Programm mit java -Xms12G -Xmx13G BreakingMaps
Ich vermute, dass das Problem nicht die Karte ist, aber die Umstände die Karte umgibt. Wenn ich dasselbe Programm schreibe, aber eine Klasse mit Hashcode-Kolonien verwende, kann das Programm keine 200K-Elemente verarbeiten.
static class Key{
final long l;
public Key(long l){
this.l = l;
}
@Override
public int hashCode(){
return 1;
}
@Override
public boolean equals(Object o){
if(o!=null && o instanceof Key){
return ((Key)o).l==l;
}
return false;
}
}
Hallo, fügen Sie Element in der Karte während der Ausführung ein? Welcher Objekttyp ist in der Karte gespeichert? – Tuco
Wie viel RAM haben Sie der JVM zugewiesen? Könnten Sie die RAM-Nutzung mit der jconsole überwachen? (Sie sollten auch überlegen, wie groß die Objekte auf der Karte auch sind) – gusto2
Was hält Ihre Karte? Was hast du schon probiert? –