gpt4 book ai didi

java - 传递参数与函数内部分配,java/android 中的内存泄漏?

转载 作者:太空狗 更新时间:2023-10-29 13:19:59 24 4
gpt4 key购买 nike

做同一件事的两种不同方式(即从数据库中获取消息)

  • 场景 1

调用类:

ArrayList<String> messages = new ArrayList<String>();
messages = Db.getAllMessage(messages);

数据库类:

public ArrayList<String> getAllMessage(ArrayList<String> m) {
m= /* get messages from DB */
return m;
}
  • 场景 2

调用类:

ArrayList<String> messages = new ArrayList<String>();
messages = Db.getAllMessage();

数据库类:

public ArrayList<String> getAllMessage() {
ArrayList<String> temp = new ArrayList<String>();
temp = /* get messages from DB */
return temp;
}

我的问题是,在场景 2 中,

  1. temp ArrayList 变量会发生什么,
  2. 它会保留在内存中直到 Activity 被销毁吗?
  3. 内存泄漏吗?

编辑:

In the talk video Android Application Architecture (Android Dev Summit 2015), Adam Powell mentions that GC is your enemy and suggests to use Scenario 1 in case of Android app.

最佳答案

变量本身将超出范围并被释放(随着调用堆栈缩小)。

变量指向的对象(ArrayList)还有另一个引用指向它,所以不会被收集。

当不再有引用(例如您的 messages 变量或字段)时,它将消失。

这不是内存泄漏。


在这两种情况下,在调用函数之前创建空的 ArrayList 是没有意义的(你应该问自己一旦收到新的 ArrayList 会发生什么,就像你担心 temp .别担心,这只是毫无意义的,没有危险或“泄漏”)。

改为这样做:

ArrayList<String> messages = Db.getAllMessages();

关于java - 传递参数与函数内部分配,java/android 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167637/

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