簡體   English   中英

在創建非文字大小的數組時,jvm如何分配memroies

[英]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只是對數組的引用,而不是數組本身。 這與使用mallocnew在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM