Java int 内存使用情况
当我考虑各种类型的内存使用情况时,我开始对Java在传递给方法时如何利用整数的内存感到有些困惑。
比如说,我有以下代码:
public static void main (String[] args){
int i = 4;
addUp(i);
}
public static int addUp(int i){
if(i == 0) return 0;
else return addUp(i - 1);
}
在下面的例子中,我想知道我的以下逻辑是否正确:
- 我最初为整数i = 4做了一个记忆。然后我把它传递给一个方法。但是,由于基元在Java中没有指向,因此在addUp(i == 4)中,我创建了另一个整数i = 4。然后,还有另一个addUp(i == 3),addUp(i == 2),addUp(i == 1),addUp(i == 0),其中每次,由于该值没有指向,因此在内存中分配一个新的i值。
- 然后对于单个“int i”值,我使用了6个整数值记忆。
但是,如果我总是通过数组传递它:
public static void main (String[] args){
int[] i = {4};
// int tempI = i[0];
addUp(i);
}
public static int addUp(int[] i){
if(i[0] == 0) return 0;
else return addUp(i[0] = i[0] - 1);
}
- 由于我创建了一个大小为1的整数数组,然后将其传递给addUp,它将再次传递给addUp(i[0] == 3),addUp(i[0] == 2),addUp(i[0] == 1),addUp(i[0] == 0),我只需要使用1个整数数组内存空间,因此更具成本效益。此外,如果我事先创建一个int值来存储i[0]的初始值,我仍然有我的“原始”值。
然后这让我想到了一个问题,为什么人们在Java方法中像int一样传递原语?只是传递这些基元的数组值不是更节省内存吗?还是第一个例子仍然只是O(1)内存?
在这个问题之上,我只是想知道使用int[]和int的内存差异,特别是对于1的大小。提前感谢您。我只是想知道使用Java可以提高内存效率,这出现在我的脑海中。
感谢所有的答案!我现在很快想知道,如果我要“分析”每个代码的大内存,它们都被认为是O(1)还是假设是错误的?