【问题标题】:java : When memory returns in method? [closed]java:当内存在方法中返回时? [关闭]
【发布时间】:2014-06-02 03:03:10
【问题描述】:

我知道函数结束后内存返回。

线程对象什么时候返回? - 什么时候返回变量 A?

public  AAA () {

     int a = 1;
     new thread() {
             public void run() {

             }
    }.start();
}

对不起。

A 何时从堆栈中移除?在 AAA() 结束或线程结束之后?

线程对象何时从堆中移除?

【问题讨论】:

  • “退货”是什么意思?
  • 首先,它不会编译,因为它是Thread,而不是thread。其次,它不是“返回”任何东西,因为run 的返回是void。第三,它会启动线程并(相对)快速地重新加入,因为在线程的主体中没有任何工作要做。
  • 谷歌“自动存储”和“调用/返回堆栈”。对于额外的信用,你可以谷歌“垃圾收集”,特别是关于 Java。

标签: java multithreading memory methods return


【解决方案1】:

我认为“返回”在您的问题中是一个糟糕的措辞选择,而您要问的是“X 何时从堆中删除?” - 即“我分配给 X 的内存何时可以重新分配给其他东西?”

如果是这种情况,您是在询问名为 Garbage Collection 的东西,这是一个持续的过程,Java 会通过该过程找到您不能再使用的东西 - “垃圾” - 并将它们从内存中删除。

简单地说,某些东西变得无法访问时会变成“垃圾” - 当没有剩余的引用时。

举个例子,我认为你是在暗示:

void foo() {
  int a = 1;
  //do stuff 
  return; 
}

每次foo() 执行时,都会为一个新的局部变量a 分配内存空间。每次它完成执行时,您都无法再次引用该变量,因此它有资格进行垃圾收集。

【讨论】:

    【解决方案2】:

    一旦线程运行方法退出,堆栈中线程对象的引用就会被释放,线程对象可以被垃圾回收。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 2014-11-17
      • 1970-01-01
      • 2017-10-02
      • 2014-01-30
      • 2010-09-07
      • 1970-01-01
      • 2016-07-20
      相关资源
      最近更新 更多