首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java:在List上调用clear()会立即释放内存吗?

在Java中,调用List的clear()方法会立即释放内存。clear()方法会将List中的所有元素移除,并将List的大小设置为0,从而释放占用的内存空间。这样可以确保在不再需要List中的元素时,及时释放内存,避免内存泄漏的问题。

然而,需要注意的是,调用clear()方法只会释放List中的元素所占用的内存空间,并不会释放List对象本身所占用的内存。如果需要完全释放List对象所占用的内存,可以将List对象设置为null,以便垃圾回收器在适当的时候回收该对象所占用的内存空间。

对于Java中的List接口的具体实现类,如ArrayList和LinkedList,它们在调用clear()方法后的内存释放机制可能会有所不同。ArrayList在调用clear()方法后,会将底层数组的引用置为null,从而释放底层数组占用的内存空间。而LinkedList在调用clear()方法后,会将所有节点的引用置为null,从而释放节点所占用的内存空间。

总结起来,调用List的clear()方法会立即释放List中元素所占用的内存空间,但不会立即释放List对象本身所占用的内存空间。如果需要完全释放List对象所占用的内存,可以将List对象设置为null。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux系统调用函数 mmap--创建内存映射区(虚拟地址空间)munmap--释放内存映射区

返回值: 成功时,返回内存映射区的首地址。 失败,MAP_FAILED (void)-1*。 功能: 将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。...此时,需要打开或创建一个文件,然后再调用mmap() 典型调用代码如下: int fd = open(name, flag, mode); if(fd<0) ... void* ptr = mmap...由于父子进程特殊的亲缘关系,父进程中先调用mmap(),然后调用 fork()。...那么调用fork()之后,子进程继承父进程匿名映射后的地址空间,同样也继承mmap()返回的地址,这样,父子进程就可以通过映射区 域进行通信了。注意,这里不是一般的继承关系。...MAP_SHARED,fd,0); if(p == MAP_FAILED){ perrot("mmap error"); exit(1); } printf("%s\n",(char*)p); //释放内存映射区

1.5K20

Netty Review - 直接内存的应用及源码分析

java虚拟机实现,本地IO一般直接操作直接内存(直接内存=>系统调用=>硬盘/网卡),而非直接内存则需要二次拷贝(堆内存=>直接内存=>系统调用=>硬盘/网卡)。...相反,直接内存释放可能延迟到 JVM 关闭时,或者应用程序调用 System.gc() 进行垃圾回收时。...但是这并不能保证直接内存立即释放,因为直接内存释放时间是由操作系统来决定的。...释放直接内存时,首先调用 buffer.clear() 方法清空缓冲区,然后将 buffer 对象置为 null,最后强制调用 System.gc() 方法触发垃圾回收。...请注意,这并不能保证直接内存立即释放,因为直接内存释放时间是由操作系统来决定的。

12300
  • Android退出应用方法总结

    ); System.exit(0); } catch (Exception e) { } } } 缺点:Service不会结束, 不会立即释放内存...2.跳转到最后一个Activity时,给Intent添加一个Flag,intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),这个标签的意思是将之前的栈都清除了...但是如果不是第一个 Activity 中调用,如 ActivityA 启动 ActivityB ,你 ActivityB 中调用 Process.killProcess 或 System.exit...总结: finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。 exit():结束当前组件如Activity,并立即释放当前Activity所占资源。...killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。 restartPackage():结束整个App,包括service等其它Activity组件。

    1.2K10

    map容器clear操作不会释放内存

    一直记得map容器底层红黑树自动析构节点,并释放内存同事进行了代码验证,并百度了答案后,我也变得不确定起来了。 只有再次看了一遍《STL源码剖析》。希望最终能够回答这个问题。...开发机中可以找到文件stl_tree.h,erase操作的源码如下: 该操作中核心调用的destroy_node分成两步: 1,先析构元素,2,然后释放内存。...3.1.4 析构函数 可以看到,即调用了析构函数,也调用内存释放函数。 所以常常vector或者string进行一系列操作后,容量变得非常大,那么可以通过下面的技巧进行容量的缩减。...四,操作系统内存分配 通过上面的分析,基本弄清楚了STL容器对内存的分配和释放原理。 最终是调用malloc或者free来进行内存分配的。...Free操作时,立即调用munmap把该物理和虚拟内存归还给操作系统。会有较高的系统耗时以及minflt。 常常通过命令pidstat –p pid –r 1即可查看。

    16.2K111

    Java 线程通信之 waitnotify 机制

    () 通知同一对象所有等待的线程 实现 wait/notify 机制的条件: 调用 wait 线程和 notify 线程必须拥有相同对象锁。...由于 wait/notify 方法是定义 java.lang.Object中,所以在任何 Java 对象都可以使用。 wait 方法 执行 wait() 方法前,当前线程必须已获得对象锁。...调用它时会阻塞当前线程,进入等待状态,在当前 wait() 处暂停线程。同时,wait() 方法执行后,立即释放获得的对象锁。 下面通过案例来查看 wait() 释放锁。...但是,与 wait() 方法不同,执行 notify() 后,不会立即释放对象锁,而需要执行完 synchronize 的代码块或方法才会释放锁,所以接收通知的线程也不会立即获得锁,也需要等待执行 notify...notify() 下面是 notify() 方法的使用,实现一个完整的 wait/notify 的例子,同时验证发出通知后,执行 notify() 方法的线程是否立即释放锁,执行 wait() 方法的线程是否立即获取锁

    81510

    微软员工聊C#中的IDisposable接口

    以前 Java 里用此类对象,从来没遇到过这么麻烦的事情,最多就是打开文件的时候要记得关掉(关于文件,我之后会细讲一下)。...因为把引用设为 null 并不等于 C 语言里面的 free,它并不能立即回收那份内存,就算你的对象里面有一个很大的数组也一样。...再进一步,如果你仔细看 HashAlgorithm 的源代码,就会发现 HashValue 这个成员数组其实没有必要存在,因为它保存的只是一次调用 ComputeHash() 的结果而已。...所以简言之,Dispose 不是用来给你回收内存用的。 Dispose 方法里把成员设为 null,并不会导致更快的内存释放。...否则即使你不再引用这个文件,其他人仍然没法立即进入锁定的区域,这就造成了不必要的等待。所以文件的所谓“打开”和“关闭”操作,本质隐含了加锁和解锁操作。 文件是很特殊的资源。

    22640

    Android 内存泄漏分析心得

    Java 中的内存分配 静态储存区:编译时就分配好,程序整个运行期间都存在。...它主要存放静态数据和常量; 栈区:当方法执行时,会在栈区内存中创建方法体内部的局部变量,方法结束后自动释放内存; 堆区:通常存放 new 出来的对象。由 Java 垃圾回收器回收。...它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往造成内存泄漏。...所以要在退出程序之前,将集合里的东西clear,然后置为null,再退出程序。 解决方案: Activity退出之前,将集合里的东西clear,然后置为null,再退出程序。...WebView造成的泄露 当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它,并释放其占用的内存,否则其占用的内存长期也不能被回收,从而造成内存泄露。

    2.4K10

    面试经常问到Java引用类型原理

    真的是这样? 3.虚引用在Jdk中有哪些场景下用到了呢? 公众号:Java后端 发布的面试相关文章已经整理完毕,可以关注 Java后端 后后台回复 666 获取。...另外需要注意的是,对于Cleaner类型(继承自虚引用)的对象会有额外的处理:在其指向的对象被回收时,会调用clean方法,该方法主要是用来做对应的资源回收,堆外内存DirectByteBuffer中就是用...看到这里你就知道SoftReference到底什么时候被被回收了,它和使用的策略(默认应该是LRUCurrentHeapPolicy),堆可用大小,该SoftReference一次调用get方法的时间都有关系...字段传入的都是true,这也符合我们的预期:对象不可达后,引用字段就会被置为null,然后对象就会被回收(对于软引用来说,如果内存足够的话,Phase 1,相关的引用就会从refs_list中被移除,...真的是这样? 严格的说,虚引用是影响对象生命周期的,如果不做任何处理,只要虚引用不被回收,那其引用的对象永远不会被回收。

    21810

    Java引用类型原理深度剖析,看完文章,90%的人都收藏了

    另外需要注意的是,对于Cleaner类型(继承自虚引用)的对象会有额外的处理:在其指向的对象被回收时,会调用clean方法,该方法主要是用来做对应的资源回收,堆外内存DirectByteBuffer中就是用...Cleaner进行堆外内存的回收,这也是虚引用在java中的典型应用。...看到这里你就知道SoftReference到底什么时候被被回收了,它和使用的策略(默认应该是LRUCurrentHeapPolicy),堆可用大小,该SoftReference一次调用get方法的时间都有关系...字段传入的都是true,这也符合我们的预期:对象不可达后,引用字段就会被置为null,然后对象就会被回收(对于软引用来说,如果内存足够的话,Phase 1,相关的引用就会从refs_list中被移除,...真的是这样? 严格的说,虚引用是影响对象生命周期的,如果不做任何处理,只要虚引用不被回收,那其引用的对象永远不会被回收。

    3.2K50

    JVM 系列(6)吊打面试官:为什么 finalize() 方法只会执行一次?

    程序应该在不使用资源时主动释放资源,或者实现 AutoCloseable 接口并通过 try-with-resources 语法确保在有异常的情况下依然释放资源。...FinalizerDaemon 线程轮询观察引用队列,并执行实际对象的 finalize() 方法。...Object object = reference.get(); // 2.3 解除关联关系 reference.clear(); // 2.4 调用 Object...#finalize() object.finalize(); } } 这里你有发现问题,当普通的引用对象进入引用队列时,虚拟机已经解除了引用对象与实际对象的关联,此时调用...—— 邓凡平 著 深入理解 Java 虚拟机(第 3 版)(第 3 章 · 垃圾收集器与内存分配策略)[7] —— 周志明 著 不只代码。

    72310

    Android退出应用程序方法总结

    如果栈内有很多Activity 的话,使用该方法显得有点捉襟见肘了,没办法一次移出全部Activity,并且没有立即释放内存,活动的资源也没有被清理。 2....android.os.Process.killProcess(android.os.Process.myPid()); System.exit(): Java中结束进程的方法,调用它将关闭当前的JVM...A窗口打开B窗口的时候,Intent中直接加入标识Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时,清除该进程空间的所有Activity。...(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 2)B窗口退出时直接使用 finish 方法即可全部退出 finish(); 4....6(容器式),是目前许多人常用的,但是需要注意的是:activityStack持有Activity的强引用,当某个Activity异常退出时,activityStack没有及时释放掉引用,可能导致内存问题

    3.9K20

    是时候忘掉finalize方法了

    Java中,垃圾收集器清理堆中的任何东西,所以根本没必要使用finalize方法来做这件事情。 如果对象创建不由垃圾收集器管理的资源,则finalize非常有用。...例如,文件描述符或本地分配内存,也就是堆外内存。垃圾收集器不会清理这些东西,所以这时候就只能用finalize来搞定。Java早期,finalize是清理非堆资源的唯一机制。...通常的话,这些对象有一个close方法用来释放资源。引入引用类型之前,这些对象还需要一个finalize方法来清理应用程序未能调用close的情况。...; } clear方法Reference抽象类中,具体的引用类型都继承自此类 通过显式调用close方法释放其原生资源的对象将调用PhantomReference.clear。...这避免了一系列的引用处理步骤,让对象不可达的时候立即被收集。 Java 9引入的java.lang.ref.Cleaner Java 9引入了java.lang.ref.Cleaner这个类。

    1.8K80

    JVM 系列(5)吊打面试官:说一下 Java 的四种引用类型

    一般认为 Java 有四种 Reference(强引用 & 软引用 & 弱引用 & 虚引用),但是其实还有隐藏的第五种 Reference,你知道是什么?...将返回 null,而虚引用调用 get() 方法永远是返回 null; 3、解除关联关系: 调用 Reference#clear() 可以提前解除关联关系。...get() 和 clear() 最终是调用 native 方法,我们在后文分析。...但是并不是重新从 GC Root 递归遍历所有对象,而是根据记录的修改行为缩小追踪范围,所以耗时相对比较短; 并发清理(恢复 mutator 线程): 标记工作完成后,进行释放内存操作,这个过程相对耗时...队列,将引用对象分别投递到关联的引用队列中; 3、守护线程 FinalizerDaemon 轮询观察引用队列,并执行实际对象的 finalize() 方法。

    55910

    JAVA笔试题汇总(价值)

    例2:If(x==33 &++y>0) y增长,If(x==33 && ++y>0)不会增长 3、JAVA中如何跳出当前的多重嵌套循环? 1. Break + 标签 2. 使用多个条件判断 3....他们的区别主要存在在引用数据类型 ==为比较两侧的对象是否同一对象,是用内存地址来比较的 equals是方法,默认是用内存地址比较,重写后,主要是用来比较两侧的对象的值是否相同,和equals方法中的实现有关...35、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?try块中可以抛出异常? 1....try后执行清理操作,用于释放资源 3....Java内存分为两类,一类是栈内存,一类是堆内存。 栈中存储的是当前线程的方法调用、基本数据类型和对象的引用,栈是有序的。 堆中存储的是对象的值,堆是无序的。

    3.2K01

    面试造火箭,看下这些大厂Android中高级岗面试原题

    Java垃圾回收、分代算法的原理,如何判定对象死亡?gcRoot有哪些?Java内存模型,哪些区可以作为gcRoot?内存怎么释放?线程的工作内存放在哪?强软弱虚四种引用的区别?...怎么项目中进行架构设计的?MVP模式的优点,如何实现?MVVM了解? 网络请求大量图片并展示页面上,需要注意什么?网络请求资源复用、图片缓存等 内存泄露有哪些?怎么处理?...6).WebView导致的内存泄漏WebView只要使用一次,内存就不会被释放,所以WebView都存在内存泄漏的问题,通常的解决办法是为WebView单开一个进程,使用AIDL进行通信,根据业务需求合适的时机释放掉...Android3.0开始,execute方法串行执行任务的,一个一个来,3.0之前是并行执行的。如果要在3.0执行并行任务,可以调用executeOnExecutor方法。...Collection是集合框架的顶层接口,是存储对象的容器,Colloction定义了接口的公用方法如add remove clear等等,它的子接口有两个,List和Set,List的特点有元素有序,

    62210

    【专业技术】Android内存泄漏简介

    一、引用没释放造成的内存泄露 1.1、注册没取消造成的内存泄露 这种Android的内存泄露比纯java内存泄露还要严重,因为其他一些Android程序可能引用我们的Anroid程序的对象(比如注册机制...即使Activity被 销毁,内存仍然不会被释放。 另外,对Context的引用超过它本身的生命周期,也导致该Context无法回收,从而导致内存泄漏。...它们的缓冲不仅存在于java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往造成内存泄露。...但是调用recycle()是一个良好的习惯 Android4.0之前,Bitmap的内存是分配在Native堆中,调用recycle()可以立即释放Native内存。...从Android4.0开始,Bitmap的内存就是分配在dalvik堆中,即JAVA堆中的,调用recycle()并不能立即释放Native内存。但是调用recycle()也是一个良好的习惯。

    1.1K30

    【JVM调优实战100例】05——方法区调优实战(下)

    操作系统allocateDirect()方法执行时会分配一块直接内存,这部分内存java代码和系统都可以进行访问。...点进去看发现它实现了Runnable,是回调任务对象,run方法中调用了Unsafe的freeMemory。...来分配直接内存,通过创建虚引用对象Cleaner对象,将DirectoryByteBuffer与回调任务绑定,当Directory被垃圾回收时,自动执行Cleaner的clean()方法,来调用Unsafe...7.10 禁用显式垃圾回收对直接内存的影响 java中可以采用System.gc()来显式的建议jvm进行垃圾回收,但这种垃圾回收方式是Full GC,既进行新生代的回收,也进行老年代的回收。...bytebuffer不会被垃圾回收,进而导致直接内存无法被释放,只有程序被动进行Full GC时进行垃圾回收。如果在程序需要频繁使用直接内存的情况,我们可以收到使用Unsafe对象来分配、回收内存

    45520

    手撕面试官系列:BAT面试常问85题

    简述 Java 垃圾回收机制。 如何判断一个对象是否存活?(或者 GC 对象的判定方法) 垃圾回收的优点和原理。并考虑 2 种回收机制。 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存?...Java 中会存在内存泄漏,请简单描述。 深拷贝和浅拷贝。 System.gc() 和 Runtime.gc() 会做什么事情? finalize() 方法什么时候被调用?...如果对象的引用被置为 null,垃圾收集器是否立即释放对象占用的内存? 什么是分布式垃圾回收(DGC)?它是如何工作的?... Java 中,对象什么时候可以被垃圾回收? 简述 Java 内存分配与回收策率以及 Minor GC 和 MajorGC。 JVM 的永久代中会发生垃圾回收么?...TIMESTAMP UPDATE CURRENT_TIMESTAMP 数据类型做什么? 主键和候选键有什么区别? MySQL 数据库服务器性能分析的方法命令有哪些?

    69620

    一次疑似 JVM Native 内存泄露的问题分析

    ) 然后读取这些临时 jar 包, 大量申请释放内存的地方 java.util.zip.Inflater 类,调用它的 end 方法会释放 native 的内存。...如果 end 方法没有调用,就会导致内存泄漏,java.util.zip.InflaterInputStream 类的 close 方法一些场景下是不会调用 Inflater.end 方法,如下所示。...这样的 native 内存短时间不释放,又由于定时任务长期执行,就可能导致内存碎片、glibc 内存不归还的出现(等下验证),就算释放 libc 也有可能不会还给操作系统。...又因为用了 zip 默认的 InflaterInputStream,导致没有办法流关闭时调用 java.util.zip.Inflater 类的 end 方法释放 native 内存,只能等到 Finalizer...机制多次 GC 以后调用,导致了 native 内存可能在短时间内无法释放

    1.3K30
    领券