Java 通过将元素设置为null释放数组中的空间?

Java 通过将元素设置为null释放数组中的空间?,java,android,arrays,Java,Android,Arrays,如果数组中有许多位图对象 例如: 如果数组变大,这将占用大量堆栈空间(或堆空间?) 我现在的问题是,如果我将不再需要的位图设为空,这是否会从堆栈(或堆)中释放空间 我无法删除元素并更改数组大小顺便说一句,请借助类似于ArrayList的集合 假设位图列表是位图列表,则可以使用索引将其删除,如所示 bitmapList.remove(indexValue); 位图对象存储在堆上。如果数组中的引用为空,并且没有其他引用,则对象可能被垃圾收集。如果不保留对位图的任何其他引用,则可以减少内存使用。如果

如果数组中有许多位图对象 例如:

如果数组变大,这将占用大量堆栈空间(或堆空间?)

我现在的问题是,如果我将不再需要的位图设为空,这是否会从堆栈(或堆)中释放空间


我无法删除元素并更改数组大小顺便说一句,请借助类似于ArrayList的集合

假设位图列表是位图列表,则可以使用索引将其删除,如所示

bitmapList.remove(indexValue);

位图对象存储在堆上。如果数组中的引用为空,并且没有其他引用,则对象可能被垃圾收集。

如果不保留对位图的任何其他引用,则可以减少内存使用。如果位图不再被引用,垃圾收集器可以销毁未使用的对象并释放内存。

解决此位图内存问题的漂亮方法是LRUCache(http://developer.android.com/reference/android/util/LruCache.html)

这是一个非常有用的工具,可以保护你的应用程序不为位图保留太多内存


但如果仍要使用数组-请记住在将引用设置为null之前在位图上使用.recycle()。释放内存后,还要使用System.gc()

如果你使用它来缓存,考虑使用一个更好的缓存机制来考虑位图的大小,这样它就不会占用太多的空间。这种机制可以是,它也包含在兼容性库和示例中

你要找的是一份工作。它是一个动态增加的数组。因此,您不需要修改大小。这与数组大小无关,而是与内存使用有关是:
myarray[i]=null允许GC释放您分配给“myarray[i]”的对象。是的:像“ArrayList”这样的(变量)“列表”容器听起来可能比(固定的)“数组”@user1886411更合适。。我认为你真正的问题是固定大小的数组。您应该真正使用
ArrayList
。除此之外,如果将
数组中的引用设置为null
,那么对象可能会被垃圾收集,前提是您没有任何其他对对象的引用。将引用设置为
null
确实会使引用“不可访问”,因此GC可以释放该引用。然而,这是Java,这是JVM,这是JIT;所以,如果你强调了你想做的事情,你可能会遇到更好的解决方案。并始终提醒JIT比您更聪明;)我已经知道了,谢谢。但如果我删除索引0,例如,整个数组将copied@user1886411当数组来自时,我告诉你使用arraylist作为位图的容器。明白了吗?是的,对于动态大小…明白了我的问题不是数组大小,而是对象的内存使用。如果我在空值对象时使用更少的内存。我不能使用remove命令,因为它会复制所有的元素,这将花费太多的时间long@user1886411在这种情况下,设置为null肯定会释放内存。
BitmapArray[ Bitmap1 ,null,null, Bitmap4,null,...]
bitmapList.remove(indexValue);