ich ein Programm, wo ich ein sehr großen short[]
Array werden:Java erfordert größeren Heap-Speicher als das, was vernünftig ist
import java.lang.Math;
public class HPTest {
public static void main(String[] args) {
int n = 30;
short[] a = new short[(int)Math.pow(2,n)];
}
}
Soweit ich weiß, ein short[]
Array 2 Bytes pro Element verwendet werden soll, und so ein Array mit 2^30 Elementen sollte etwa 2 GiB RAM benötigen.
Um das Programm auszuführen, habe ich versucht deshalb
java -Xms2000m HPTest
aber immer noch einen Heap-Speicher Fehler bekam. Sogar bei 3000m
habe ich den gleichen Fehler, aber bei 4000m
hat es funktioniert.
Irgendwelche Ideen, warum ich so weit über die geschätzte Grenze von 2000m
gehen musste?
EDIT: Wie von vielen Benutzern darauf hingewiesen wurde, machte ich einen sehr peinlichen Fehler bei der Erklärung, dass eine kurze braucht 1 Byte statt 2 Bytes. Die Frage sollte dann sein, warum es mit 2000m
nicht ausreicht.
short ist 2 Bytes ... –
Ein 'Byte' ist ein Byte, daher der Name. Btw '1 << n' ist eine effizientere Methode, um 2 zu berechnen. –
Trotzdem sollte 3000m/3GB für ihn genug sein? –