使用新对象 删除旧对象更新ArrayList



我仍在学习Java的基础知识,并尝试在不同级别上理解该语言。我有一个关于在Java中创建/删除旧对象的问题。

我有一个例子:

说我有laptopList = new ArrayList<Laptop>;,其中包含Laptop类的对象。我们有20个创建的对象,所有对象都添加到了arraylist中。现在,我们想使用新的笔记本电脑对象更新第四索引。在这种情况下,我们可以创建新的笔记本电脑对象并使用laptopList.set(4, new Laptop("Dell",1024));

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

我知道,在Java中是实施的工具,称为垃圾收集器。在这种情况下它有效吗?它会立即删除非使用实例吗?如何以及何时知道该特定实例将不再使用?

预先感谢您的响应和信息。

java的垃圾收集器将处理以前在索引4处的对象的内存,假设可以收集它。如果您的代码另一部分未引用它,则应可收集。Java会定期运行Java收集器,因此没有理由自己运行。

Java支持针对不同情况进行优化的垃圾收集器的众多实现。默认垃圾收集器通常在大多数一般应用中都可以很好地工作。

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

好吧,您没有机会直接删除Java中的对象。

在您在发布中绘制的情况下,笔记本电脑仅由阵列列表引用。一旦您在第四索引上存储一个新对象,就没有对对象的剩余引用,您就已经覆盖了。因此可以删除该对象。

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

基于未删除对象的内存使用主题与编译的语言有些不同。当您启动JVM(使用JVM启动应用程序)时,JVM从基础OS请求一定数量的内存(您可以在使用某些标志启动JVM时控制此金额),因此JVM自行控制存储器。这意味着,内存完全由JVM控制,因此在此处无法使用越少的电池。

最新更新