java - 从 map 中删除后如何从内存中删除对象/实例?

标签 java android object memory dictionary

我在公开可用的 map 中保留对本地创建的对象的引用。当我从 map 中删除对象时,它也应该从内存中删除(无效化)。

public class X {
    public boolean infiniteloop = true;

    public X() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (infiniteloop) {
                    System.out.println("Still exists");
                }
            }
        }).start();
    }


public class Y{
      Map myMap = new HashMap();
      public Y() throws InterruptedException{
       X x = new X();
       myMap.put("Key", x);
       Thread.sleep(10000);
       ((X)myMap.get("Key")).infiniteloop= false;
       myMap.remove("Key");
      }
 }

在上面的代码中,"Still exists"是 myMap.remove("Key") 之后的 printend。这意味着该对象仍然存在于内存中。我怎样才能将它从内存中删除?

最佳答案

Java 负责在最适合您的时候从内存中删除对象,所以不用担心。如果你真的想确保线程被终止,你应该保留对你的 Thread 和/或 Runnable 的引用,这样你就可以尝试优雅地关闭线程(如果突然必要的)。

如果你想尽快从内存中删除对象,你可以尝试System.gc()您可以尝试 System.gc() 但这被认为是 bad practice

使用父实例变量可能涉及一些技巧,使线程不会终止,但比我聪明的人肯定可以解释这一点:)

关于java - 从 map 中删除后如何从内存中删除对象/实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29821273/

相关文章:

Android:在启动的 Activity 上设置窗口背景

java - 如何在 Android 中离线运行 Dokka

android - 在android sqlite中选择不同的值

android - 如何模拟点击物理 android 菜单按钮?

java - 如何使用作业对象数组? (Jni)

java - 数组类型未定义 copyOf 方法

java - 修改一个类,使其可以用作 HashMap 中的键

java - 为什么 JIT 会在启动时编译一些方法?

java - 为什么我的算法在 PTA 中输出总和的每一位都失败?

python - 属性错误: 'str' object has no attribute (function)