我正在为内存受限设备编程。因此,我想避免分配任何内存。针对数组迭代的Java语法是否分配内存?
显然,迭代跨集合,列表等将分配一个迭代器,从而分配内存。所以这应该避免。
跨数组迭代的本机java语法是否分配内存?
Object[] array = getArray()
for(Object elem: array){
//do something
}
(我想我可以一直使用老式的for循环与索引变量)。
我正在为内存受限设备编程。因此,我想避免分配任何内存。针对数组迭代的Java语法是否分配内存?
显然,迭代跨集合,列表等将分配一个迭代器,从而分配内存。所以这应该避免。
跨数组迭代的本机java语法是否分配内存?
Object[] array = getArray()
for(Object elem: array){
//do something
}
(我想我可以一直使用老式的for循环与索引变量)。
都能跟得上。在我检查过的所有编译器中,都是由for
循环(0..array.lengh-1)实现的。
请注意,Java阵列不实现Iterable
。由此可看出,例如,通过下面的代码:
Object[] arr = new String[100];
Iterable<?> iter = arr; // Error: 'Type mismatch:
// cannot convert from Object[] to Iterable<?>'
[UPDATE]
这里是明确的源:http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2
for循环如
for (VariableModifiersopt Type Identifier: Expression) Statement
具有以下含义时表达式的类型是T []的数组:
T[] a = Expression; for (int i = 0; i < a.length; i++) { VariableModifiersopt Type Identifier = a[i]; Statement }
它不分配新的内存。下面的foreach循环:
for (type var : array) {
body-of-loop
}
等效于此:
for (int i = 0; i < array.length; i++) {
type var = array[i];
body-of-loop
}
正如你所看到的,没有额外的内存分配正在取得进展。
具体来说,需要一些stak空间类型var = array [i];) – 2012-01-15 14:40:47
那么,'int i'和'type var' _do_分配一些堆栈内存(和一个常量值),但不会分配额外的_heap_内存。 – 2012-01-15 14:51:26
我不知道可以禁用JVM垃圾收集器。 **在这种情况下**如何工作? – 2012-01-15 14:34:42
...更重要的是,可以称为Java? – delnan 2012-01-15 14:35:10
你是对的,GC没有完全禁用 - 我们只是想避免让它运行,所以我更喜欢这样看。 – jhourback 2012-01-15 14:38:02