Burence Asked:2020-02-15 06:36:45 +0000 UTC2020-02-15 06:36:45 +0000 UTC 2020-02-15 06:36:45 +0000 UTC 标记清除垃圾收集算法 772 据我了解,垃圾收集有两种基本方法: 复制收藏家 标记和扫描 这篇文章中描述了这两种算法。根据第二种算法,文章作者写道: 对象在内存中分配 需要运行GC 申请暂停 收集器遍历对象树,标记存活对象 收集器遍历整个内存,找到所有未标记的内存块,将它们存储在“空闲列表”中 当新对象开始分配时,它们被分配到“空闲列表”中可用的内存 如果我没理解错的话,那么需要删除的对象就转移到了“空闲列表”中。但实际上,这些对象的删除在哪里呢?还是它们没有被明确删除,而是在创建新对象时被简单地覆盖? java 2 个回答 Voted Best Answer Artem Konovalov 2020-02-15T06:58:07Z2020-02-15T06:58:07Z 据我了解,不需要执行额外的操作来删除内存中的对象。JVM将创建新对象代替旧对象。 关于如何创建和删除对象的文章C++ 删除运算符实际上并没有删除任何东西。它只是将指向的内存返回给操作系统。然后操作系统可以自由地将该内存重新分配给另一个应用程序(或稍后再次分配给该应用程序)。 我也是这么想的java,只是没有操作系统,但是jvm. (我不太确定,如果有人纠正我会很高兴) Mikhail Vaysman 2020-02-15T07:09:02Z2020-02-15T07:09:02Z 如果一个对象不再能被强引用访问,那么它就可以被垃圾回收。垃圾收集器可以调用finalize. 这个方法,潜在地,可以恢复对象——通过强引用(strong reference)使它可用。 收集器将内存标记为“空闲”,垃圾收集器不执行任何额外的措施来清理内存。 在初始化时创建新对象时,所有字段都会设置为默认值。 如果您需要删除秘密信息(密码、密钥等),那么您需要自己尽快完成。因为在内存转储的情况下,它可能变得可用。此外,部分信息可以复制到堆上的其他位置,并且无法清除“旧”区域。
据我了解,不需要执行额外的操作来删除内存中的对象。
JVM将创建新对象代替旧对象。关于如何创建和删除对象的文章
C++我也是这么想的
java,只是没有操作系统,但是jvm. (我不太确定,如果有人纠正我会很高兴)如果一个对象不再能被强引用访问,那么它就可以被垃圾回收。垃圾收集器可以调用
finalize. 这个方法,潜在地,可以恢复对象——通过强引用(strong reference)使它可用。收集器将内存标记为“空闲”,垃圾收集器不执行任何额外的措施来清理内存。
在初始化时创建新对象时,所有字段都会设置为默认值。
如果您需要删除秘密信息(密码、密钥等),那么您需要自己尽快完成。因为在内存转储的情况下,它可能变得可用。此外,部分信息可以复制到堆上的其他位置,并且无法清除“旧”区域。