首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新的object+deleting旧对象更新ArrayList

使用新的object+deleting旧对象更新ArrayList
EN

Stack Overflow用户
提问于 2019-03-05 02:09:52
回答 2查看 88关注 0票数 2

我仍然在学习Java的基础知识,并试图在不同的层次上理解这门语言。我有一个关于在Java中创建/删除旧对象的问题。

我有一个例子:

假设我有一个包含Laptop类的对象的laptopList = new ArrayList<Laptop>;。我们已经创建了20个对象,都添加到了ArrayList中。现在我们想用一个新的Laptop对象来更新第四个索引。在这种情况下,我们可以创建新的Laptop对象并使用laptopList.set(4, new Laptop("Dell",1024));

在这一点上,我想问你,->,我们将不再使用那个旧的实例,但它仍然存在于内存中。我们是否应该将旧实例设置为null值(或者以某种方式删除它)?我知道对于PC来说,这可能没有问题,但它对移动设备有什么影响(内存使用、=>更快、电池放电更快)。

我知道在Java中实现了一个叫做垃圾收集器的工具。它在这种情况下可以工作吗?是否立即删除不使用的实例?它如何以及何时知道该特定实例将不再使用?

提前感谢您的回复和信息。

EN

回答 2

Stack Overflow用户

发布于 2019-03-05 02:21:52

Java的垃圾收集器将处理释放以前在索引4处的对象的内存,假设它可以被收集。如果它没有被代码的另一部分引用,那么它应该是可收集的。Java会定期运行java收集器,所以没有理由自己运行它。

Java支持许多垃圾收集器的实现,这些实现针对不同的环境进行了优化。默认垃圾收集器通常适用于大多数常规应用程序。

在移动应用程序中,默认情况下,在移动设备上运行的JVM应该使用针对移动环境优化的垃圾收集器。您可以在这里了解有关java垃圾收集的更多信息:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

票数 0
EN

Stack Overflow用户

发布于 2019-03-05 02:23:51

在Java中,您没有任何机会直接删除对象。

在您在帖子中绘制的情况下,笔记本电脑仅由ArrayList引用。一旦你在第四个索引上存储了一个新的对象,就没有对该对象的剩余引用了,你已经覆盖了。以便可以删除该对象。

而且,正如您已经猜到的那样,垃圾收集器将处理这个未使用的对象。但回应你的回答:你不会知道,当这种情况发生。也许垃圾收集器会立即开始运行,并从内存中删除对象。最有可能的是,垃圾收集器不会立即运行,因此对象会保留在内存中。垃圾收集器可以在应用程序空闲时运行,但一旦需要内存,它肯定会运行。您可以要求JVM运行垃圾收集器(System.gc();),但同样,您也不能绝对控制垃圾收集器。它也可能在几毫秒后运行。

基于未删除对象的内存使用主题与编译语言略有不同。当您启动JVM (使用JVM启动应用程序)时,JVM从底层操作系统请求一定数量的内存(您可以在使用某些标志启动JVM时控制这个数量),因此JVM自己控制内存。这意味着,内存完全在JVM的控制之下,因此较少的电池使用不会在这里保持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54989127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档