[英]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.