繁体   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