[英]how does jvm allocate memroies when creating array with non literal size
在c / c ++中,必須在創建時指定數組大小的字面數,即int arr[10];
。 但在java中,我們可以用這種形式創建一個數組int size = 10; int[] arr = new int[size];
int size = 10; int[] arr = new int[size];
。 並且編譯器不會弄清楚變量大小究竟是什么。 那么jvm如何分配數組所需的內存?
Java在堆上分配數組內存。 變量arr
只是對數組的引用,而不是數組本身。 這與使用malloc
或new
在c / c ++中分配數組相同。
在基於JVM的語言中,Java是最流行的,內存分配在運行時發生,通常在堆上。 但是,有一些方法可以獲得堆外內存分配,這些方法必須由應用程序本身處理,並且永遠不會被垃圾收集或導致額外的開銷。
在int arr[10];
array是在編譯時確定的大小,在int size = 10; int[] arr = new int[size];
int size = 10; int[] arr = new int[size];
array確定運行時的大小。 您還可以在c ++中創建在運行時創建的動態數組。
細節:
在c ++中,
int arr[10];
此數組在堆棧上分配,並在編譯時決定數組的大小
int *arr = new int[10];
此數組在堆上分配,並在運行時決定數組的大小。
在Java中,始終使用new
關鍵字創建數組,並在Heap上創建它們。
int[] arr = new int[size];
int[] arr
是對java中的整數數組的引用,在C ++中, int *arr
是指向整數數組的指針。 所以,你也可以用c ++實現這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.