gpt4 book ai didi

Java - 在另一个方法中使用返回值作为参数 - 内存管理

转载 作者:行者123 更新时间:2023-11-30 06:00:29 30 4
gpt4 key购买 nike

考虑内部内存的使用

input = web_service.FullCompanyListChunksGet(x, ChunkSize);
ReadXML(input);

应该使用相同的内存

ReadXML(web_service.FullCompanyListChunksGet(x, ChunkSize));

不是吗?两个示例都仅传递对 ReadXML 方法的引用吗?

请帮助我理解其中的区别。谢谢

最佳答案

我希望 JIT 代码几乎相同。在字节码中,第一种形式有一个额外的存储/加载,但我会非常惊讶地发现这会产生真正的差异。第一种形式的优点是它可以使调试更容易 - 但同时也使代码更加冗长。

编辑:我最初写道两者创建相同的字节码,但事实并非如此:

public class Test {
static void separate() {
String x = "hello";
String y = x.toString();
foo(y);
}

static void combined() {
String x = "hello";
foo(x.toString());
}

static void foo(String x) {
}
}

编译为(仅单独组合方法):

static void combined();
Code:
0: ldc #2; //String hello
2: astore_0
3: aload_0
4: invokevirtual #3; //Method java/lang/String.toString:()Ljava/lang/String;
7: invokestatic #4; //Method foo:(Ljava/lang/String;)V
10: return

static void separate();
Code:
0: ldc #2; //String hello
2: astore_0
3: aload_0
4: invokevirtual #3; //Method java/lang/String.toString:()Ljava/lang/String;
7: astore_1
8: aload_1
9: invokestatic #4; //Method foo:(Ljava/lang/String;)V

关于Java - 在另一个方法中使用返回值作为参数 - 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200642/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com