java传递值和内存以及cpu利用率

时间:2013-05-25 03:59:06

标签: java

来自C背景我有一个非常基本的问题:传递一个像String数组这样的大型数据类型的值会调用java中的复制构造函数。

因此,此代码会导致通过复制list2中的列表在内存中创建重复列表。 因此,双内存和CPU利用率。

String[] getList() {
    String[] list = new String...
    ...
    return list;
}

String [] list2 = getList();

我的假设是否正确?如果是,是否有替代方法,比如在C中传递指针。

PS:如果我们让垃圾收集器完成清理额外内存的工作,那么这不是另一套清理内存的CPU利用率,这些内存不应该在第一时间创建。

2 个答案:

答案 0 :(得分:5)

不,不会复制数组的内容。将传递指向堆上的数组的引用。

Java没有指针,它有引用。在Java中,指向堆上对象的引用作为参数传递并由方法返回。数组是Java中的对象,所以它们也是这样处理的。

答案 1 :(得分:5)

不,它不会使内存和CPU使用量增加一倍。在Java中,所有非基本类型都存储为引用,这些引用按值传递。

因此,在您的示例中,getList方法将在堆上构造一个数组并返回对该数组的引用。没有涉及数组副本;只是一个参考副本。