请问System.gc()这个方法执行后是立即回收内存吗?
 A a = new A();
a = null;
System.gc();

把A创建的对象的引用置为空后,执行System.gc();
就立即把创建的这个对象的所占的内存回收掉了吗?
还是说得等到当前内存不足时他才会去回收?System.gc()只是提前让系统去观察下
当前系统的内存情况而已?

0

3个回答

不会的,System.gc();只是建议Java虚拟机对此部分内存进行回收,但是不一定会发生GC

4

【System.gc();】此函数建议JVM进行GC,只是建议而非一定,

很多情况下它会触发主GC

参考链接:http://blog.csdn.net/jiyiqini/article/details/46725647

0

视当时内存使用量而定,并不是一定的

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
调用System.gc没有立即执行的解决方法
查看源码当我们调用System.gc()的时候,其实并不会马上进行垃圾回收,甚至不一定会执行垃圾回收,查看系统源码可以看到 /** * Indicates to the VM that it would be a good time to run the * garbage collector. Note that this is a hint only. There i
System.gc与finalize以及Thread对象何时被回收
System.gc()建议JVM进行一次垃圾回收。垃圾对象在被回收之前,其finalize方法会被JVM自动调用,用于做一些清除工作。简单地说,调用了System.gc()之后,java在内存回收过程中就会调用那些要被回收的对象的 finalize() 方法。 下面看一个例子。 User:package com.zzj.gc; public class User { private S
malloc/free和new/delete释放后的内存系统会马上回收吗?
         用户 free 掉的内存并不是都会马上归还给系统,ptmalloc 会统一管理 heap 和 mmap 映射区域中的空闲的 chunk,当用户进行下一次分配请求时,ptmalloc 会首先试图在空闲的chunk 中挑选一块给用户,这样就避免了频繁的系统调用,降低了内存分配的开销。 ptmalloc将相似大小的 chunk 用双向链表链接起来,这样的一个链表被称为一个 bin。P...
关于弱引用WeakReference的一点疑问
很多文章都这样解释弱引用: 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。 虽然垃圾回收器的优先级很低,但是不能保证在我们使用对象的时候它不执行gc啊。按照字面理解就...
什么时候在游戏中调用System.gc()?[javaME]
不知道大家有否看过“反编译的西伯利亚攻击源代码”的代码,okay,不知道它的权威性有多大,不过西伯利亚攻击这个游戏还是有名气的,也许值得一看。它的主引擎就是声明一个静态的图片数组: classMainEngineextendsFullCanvasimplementsRunnable{。。。。staticImageimgs[];publicstaticvoi...
Android gc与内存泄漏,溢出的理解
GC介绍 在java中垃圾回收是自动释放的,不像c/c++需要手动释放,手动释放可能处理不当,会造成内存泄漏与数据混乱等等影响。 GC常用的回收算法 1,计数 引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象(不是引用)都有一个引用计数。当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引
activity的四种状态以及内存回收优先级
1.activiti的四种状态  活动状态:在屏幕的前台,获取了焦点,可以响应用户操作 暂停状态:activity失去焦点,但对用户可见,(如在其上有一个Toast或者alertDialog),此状态的活动是存活的,它保留着所有状态和成员信息,在内存极小时候可能被杀掉 停止状态:完全被另一个activity所遮挡,但他保留了所有信息,只是对用户不可见,其他地方需要内存往往被杀掉 非活动状态
Unity优化大全(四)之CPU-GC(内存回收)和Sricpt
前言:            对于GC,大家可能不陌生把,也就是内存回收。同时笔者在做自己的小游戏中发现很多细节都会影响GC,现在就给大家梳理下一些需要注意的地方。 进入主题:               在说CPU优化时,谈起GC是不是觉得很奇怪?其实笔者不这么觉得,虽然GC是用来处理内存回收的,但是却增加了CPU的开销。因此对于GC的优化目标就是尽量少的触发GC。
java内存回收之finalize()方法原理
确认对象已死亡: 1、引用计数算法:算法原理是 给每个对象中添加一个引用计数器,每当有地方引用它时,计数器值就加1,当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能再被使用的。 2、可达性分析算法 :原理是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(reference Chain),当一个对象到GC ...
强引用、软引用、弱引用、虚引用 实例 及 gc回收后的自救
package com.sgcc.test; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReferenc...
关于System.gc()解决File的Delete和DeleteOnExit()删除文件无效的问题——已解决
项目中使用FILE类中的Delete和DeleteOnExit删除文件,当文件夹有多个文件时使用delete无效,使用DeleteOnExit删除有时候有效有时候无效。。。。百思不得其解…… 关于两个方法的区别,网上很多解释,不多说。 程序检查了很多遍,确实关闭了所有的FileInputStream和FileOutputStream,但是仍然删除不掉。 因@anly_hz兄台的帖子得到灵感,
activity destory掉后马上释放内存方法
其实关心这个问题有很长很长时间了,只要是做过内存优化的战友们都非常关心非常纠结内存问题,但是这个问题却纠结的我时间最长,不过最近解决了部分。        当某一个activity被finish掉后,我们想要马上释放他占用的内存,但是为什么没有被释放呢?如何做呢?        1.首先要解决的是看看你的有没有内存泄漏,如果有,抱歉,即使你调用了几百次finish也不会释放掉内存的。。。。
java中ArrayList之clear内存回收
右边为调用clear后内存情况 现将list.clear改为 list=null,再看看运行情况 赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收 clear()只是清除了对象的引用,使那些对象成为垃圾
关于WeakReference被回收的时机
上一篇我讲到了关于SoftReference在什么情况下会被垃圾回收器所回收,这一篇我将用代码来验证WeakReference在什么情况下会被垃圾回收器所回收,究竟是在FULL GC的时候被清除还是在GC的时候被清除。 直接上代码: public class WeakReferenceTest { public static void main(String[] args) { WeakRe...
探究Android 关于Activity调用finish()方法后的内存释放情况
公司一直在做自己的硬件产品,但是运行内存只有512M,所有一旦后台的驻留应用过多,前台的应用就会很卡断。当然,原因有很多,我们产品的cpu有瓶颈,计算过慢,导致卡断。后台的常驻服务和应用过多,像QQ,微信,360,豌豆荚之类的。运行内存不足,内存管理机制就开始起作用,其中又涉及到swap分区等linux的相关知识…其实我们做应用层的,正常情况下,只需要关心自己的app是否会内容泄露,当设备内存不足时
Qt中子窗口关闭之后,立即释放资源的方法
用Qt做界面的时候,很多时候都会遇见点击一个按钮弹出一个新的窗口的功能。我在刚开始做这个功能的时候,直接是点击一次按钮就new一个新的窗口,每次都只是将子窗口关闭而已,并没有去释放子窗口的资源,这样就会出现重复点击按钮的话,窗口的资源就会越积越多。 所以在新建一个窗口的时候就可以设置窗口的属性,设置窗口在关闭之后立即释放资源: notepadpage *NotepadPage = new n...
动态分配的内存在进程结束后会被操作系统回收吗?
首先答案是:会。 这是当时在华为培训班的时候遇到的一个问题。很多同学本着C++没有内存回收的理论认为不会被回收。而我本着操作系统设计的时候就会考虑到这一点,所以大多数现代操作系统一定会回收。这是一个需求决定的机制,而不是由于语言的限制。 我是这样分析的: 1.操作系统是对于硬件的抽象。也就是说再没有操作系统的时候程序直接和机器打交道,而有了操作系统以后程序以为是很机器打交道,其实是在和操作系
Redis 的过期策略以及内存回收机制
一、Redis过期策略  redis是如何处理过期的key?      分为2种:passive (被动)和active(主动)      所谓被动的处理方式就是 :当一些客户端进行访问的时候,秘钥被动过期,并且发现秘钥超时     只有被动是不够的,因为所有过期的秘钥是永远不会被访问的,所以Redis有自己的过期算法。     Redis 每秒运行10次 会执行以下概率算法: 从相关...
进程是如何结束与回收的
大致描述进程创建的过程,系统中有一个叫做init的初始进程,由它调用fork产生子进程(完全拷贝父进程的一切堆栈,代码,数据,文件资源等),子进程使用exec装载磁盘中的elf文件,更换自己的程序(包括代码段和数据段)。进程的退出必须要使用exit(),exit()不是一个语言上的返回,它是一个系统调用,会释放当前的内存,文件资源等,但是此时pcb还未回收,只是一个僵尸进程,父进程使用wait()得
PHP中的unset方法究竟能否释放内存
http://blog.csdn.net/chanya/article/details/49251025
使用线程池时候当程序结束时候记得调用shutdown关闭线程池
在一个方法里面创建了一个线程池,然后做一个分片上传文件的任务,有多少个分片就有多少个线程使用newSingleThreadExecutor 创建,忘了调用shutdown比线程池本来以为就算没关闭也会被垃圾回收,因为线程池是方法里面创建的局部变量但是非守护线程是不会回收的,导致一直创建线程。。。https://www.2cto.com/kf/201802/722814.htmlhttp://blo...
activity被系统回收onDestory会不会在执行以及如何恢复
activity被系统回收onDestory会不会在执行以及如何恢复
C#使用List.Clear()方法可以让GC回收内存吗?
问题:我现在有一个list,里面放了若干对象,因为业务需要,程序运行后根据用户需求,要把list清空,再装入新的东西,每一次用之前都会清空它,然后装入新的东西,请问,内存是否会泄漏?测试:我设计一个list,清空用clear方法,装入新东西用add(new obj)。public void GameInit() { PlayerCnt = 0; ...
关于Redis会回收超时key的存储空间的问题?
这里有一个问题需要讨论:如果key超时了,Redis会回收key的存储空间吗? 答案是不会。Redis的key超时不会被其自动回收,它只会标识哪些键值对超时了。 这样做的一个好处在于,如果一个很大的键值对超时,比如一个列表或者哈希结构,存在数以百万个元素,要对其回收需要很长的时间。如果采用超时回收,则可能产生停顿。坏处也很明显,这些超时的键值对会浪费比较多的空间。 Redis提供两个方式...
android系统内存不足时,应用被系统回收发生了什么?
[code="java"] android独特的内存机制,导致系统内存不足时会销毁后台的应用,这里我们研究一下应用被销毁后重新加载时的情形 一个安卓应用A先后打开3个Activity: a --> b --> c 这个时候如果来了一个电话, 接电话的过程中, 手机内存不够, 那么应用A将会被系统回收 当打完电话,再次进入应用A的时候会发生下面的事情: 1, 系统会重...
Android onFinish()不会回收内存

 正常情况下,只需要关心自己的app是否会内容泄露,当设备内存不足时,我们的数据是否显示正确,页面是否能正常打开,保证app不会carsh。 我们关闭一个页面会调用finish()方法,然后再onDestroy()方法里面做一些释放操作,但是我们怎么知道这个Activity里面的内容有没有被释放了。 adb 提供了一个命令 adb shell dumpsys mem...
Java堆外直接内存回收
JVM参数设置:-XX:MaxDirectMemorySize=20M import java.nio.ByteBuffer; import sun.nio.ch.DirectBuffer; public class DirectMemoryOOM { public static void main(String[] args) { ByteBuffer buffer = null; try { ...
Red Hat Linux9安装
待补充
System.gc 没有立即执行
System.gc 没有立即执行 作为一个安卓开发人员,你一定见过OOM() 最近在做一个大图片加载的项目,由于内存实在是太小,需要对bitmap进行gc清空,这个时候我发现一个问题,GC的处理并不及时,为啥。。。。。。。 private void gcBitmap(Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycl...
Android 当App内存不足或在后台运行时回收部分activity的流程分析。
以前写的文章,放到博客上当记录吧。Android 当App内存不足或在后台运行时回收部分activity的流程分析。 首先我们要找到整个内存不足然后回调回收activity的入口,在哪里呢?在ActivityThread里,通过之前的源码阅读我们发现,当一个新的app启动的时候,系统将从Zygote进程fork一个子进程出来,当然我们知道App不一定只存在一个进程,只要定义了Activity进程要游
关于C++中delete释放内存时效性问题
  如需转载请标明出处:http://blog.csdn.net/itas109  QQ技术交流群:129518033   测试示例:     #include <iostream> using namespace std; int main() { int *map; int i=10; while(i--) { map=new int...
Java内存回收机制--Java引用的种类(强引用、弱引用、软引用、虚引用)
写在前面:对Java有一定认识的人都知道,Java有垃圾回收机制,尽管如此,Java同样也会出现内存泄露,本篇系列主要介绍Java的内存回收机制,以及介绍开发过程中内存管理的小技巧。本文参考《疯狂Java-突破程序员基本功的16课》 Java内存管理包括内存分配(创建Java对象)和内存回收(回收Java对象)。这两者都是JVM(Java虚拟机)自动完成,正因如此,可能很多程序员不再
GC在堆和方法区的内存回收
对象的存活判断对象是否存活,主流实现是可达性分析。 可达性算法的基本思路,通过一系列为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain), 当一个对象到GC Roots 没有任何引用链相连时,相当于图论的从GC Roots不可达,则这个对象不可用。 引用类型 -* 强引用* 只要强引用还存在,垃圾收集器永远不会收掉被引用的
立即执行函数
一 . 立即执行函数 立即执行函数,顾名思义,就是能立即执行的函数 一般的,函数的执行都遵循着先声明,后调用的原则,无论是函数表达式还是函数声明,例如: (1)函数声明 // 声明 function sayHello() { console.log("hello"); } // 调用 sayHello(); // hello (2)函数表达式 // 声明 var sayH
Java的内存回收
Java虚拟机内存原型寄存器:我们在程序无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是堆中 存取速度比堆块,仅次于寄存器,栈数据可以共享,栈的数据大小与生存期必须是确定的,缺乏灵活性。 堆:存放new产生的数据 可以动态分配内存大小,生存期也不必事先告诉编译器,因为它在运行时动态分配内存,Java的垃圾收集器会自动收走这些不再使用的数据,但缺点是,由于在运行时分配
Activity被回收后再次进入的生命周期
activity onSaveInstanceState
关闭线程池shutdownNow()方法的局限性
shutdown():等待那些已经开始的任务执行完毕,等待任务队列中尚未开始的任务执行完毕。shutdownNow():尝试取消已经开始的任务(中断这些任务),返回任务队列中尚未开始的任务。shutdownNow只返回任务队列中尚未开始的任务列表,但是想要记录那些已经开始但被取消的任务,可以使用条件检查:线程池的状态处于关闭中且任务的状态为已中断(当然前提是任务要保持中断状态)。之前对中断有点误解...
JVM——方法区的内存回收
方法区的内存回收可以说是“性价比”较低的,因为方法区中需要被回收的资源很少,不像Java堆,Java堆中存放对象的实例,一次回收基本能达到70%--95%的内存回收。方法区中需要被回收的主要有废弃常量和无用的类。        废弃常量是否已经无用的判断是很容易的,但是对于类是否无用的判断就相对比较严格,判断类是否已经无用需要同时满足以下三点:        一.该类的实例已经全部别回收,即Jav...
Java线程池任务执行完毕后回收线程
Java线程池任务执行完毕后回收线程 线程池中的所有任务执行完毕后,线程并没有停止,导致JVM出现OOM问题。后来查找了下面链接的资料,解决问题。 ref: http://www.cnblogs.com/pengineer/p/5011965.html 问题及现象: public static void main(String[] args) { BlockingQueue queu...
关于bitmap的回收问题
Android中我们会用到大量的图片加载,因此,我们也会不可避免的用到Bitmap,对于Bitmap加载图片在这里就不作解释了,有需要的可以自行百度。 最近在项目中碰到了很严重的内存泄漏问题,老板下令必须查清楚原因,然后就加班一点带你盘查,最后发现我们的APP中用到了大量的图片资源,就怀疑是Bitmap引起的: 1.ImagView在被销毁的时候会自己释放资源,因此我们很少去主动释放资源,后面发