请问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...
Bitmap调用recycle()回收内存
Bitmap调用recycle? When?     Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间。   Q 1: Bitmap是否有调用recycle方法的必要性? A: 嵌入式系统总是格外注重空间的问题,不小心的话就会有OOM。但是应用层使用java的android平台有其天然的优势【java语言有自己的垃圾回收,android平
C#如何立即回收内存
1.把对象赋值为null 2.立即调用GC.Collect(); 注意:这个也只是强制垃圾回收器去回收,但具体什么时候执行不确定。  代码: public partial class Form1 : Form { [System.Runtime.InteropServices.DllImportAttribute("kernel32.
JVM内存回收之finalize()方法
finalize()方法        之所以要使用finalize(),是存在着垃圾回收器不能处理的特殊情况。假定你的对象(并非使用new方法)获得了一块“特殊”的内存区域,由于垃圾回收器只知道那些显示地经由new分配的内存空间,所以它不知道该如何释放这块“特殊”的内存区域,那么这个时候java允许在类中定义一个由finalize()方法。       特殊的区域例如:1
解决Java线程池任务执行完毕后线程回收问题
http://www.cnblogs.com/pengineer/p/5011965.html       对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所应当是非常智能的,线程的生命周期应该完全由Java本身控制,我们要做的就是添加任务和执行任务。但是,最近做文档批量上传同步时发现线程池中的所有任务执行完毕后,线程并没有停止,然后做了一个测试,发现确实如此:   问题及
关于Activity调用Ondestroy()方法之后内存管理器为什么没有释放占用资源
最近在研究activity 执行了finish之后为什么还有很多资源没有释放的问题,关于这个原因的产生,最直接的想法就是activity里面还有很多资源没有手动释放,因为大家知道,activity只不过是一个高度抽象的UI组件,他仅仅只是一个控制界面的功能,包括分发touch时间还有一些列的作用,展示界面的工作是交给DecorView下的所有view以及viewGroup,所以我们可以认为acti
java中ArrayList之clear内存回收
右边为调用clear后内存情况 现将list.clear改为 list=null,再看看运行情况 赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收 clear()只是清除了对象的引用,使那些对象成为垃圾
进程结束new出的内存会回收吗?
      今天调试程序,弄得有点纠结。无意间,和一帮同事讨论起一个问题:进程结束操作系统会回收new的内存吗?在自己的印象中,一直固执地认为,在使用C++操作分配对象内存后,如果程序员自己不用相应的delete操作回收的话,这块从堆内存是一直存在。在讨论中,有同事提醒说,在进程结束后,new操作的内存会被回收。但也只是结论,也说不出具体理由。      没关系,何不google一下,一查下去
java内存回收之finalize()方法原理
确认对象已死亡: 1、引用计数算法:算法原理是 给每个对象中添加一个引用计数器,每当有地方引用它时,计数器值就加1,当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能再被使用的。 2、可达性分析算法 :原理是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(reference Chain),当一个对象到GC ...
对象复活
http://blog.csdn.net/dc_726/article/details/7934101 附:对象复活 在根搜索中得到的不可达对象并不是立即就被标记成可回收的,而是先进行一次 标记放入F-Queue等待执行对象的finalize()方法,执行后GC将进行二次标记,复活 的对象之后将不会被回收。因此,使对象复活的唯一办法就是重写finaliz
activity的四种状态以及内存回收优先级
1.activiti的四种状态  活动状态:在屏幕的前台,获取了焦点,可以响应用户操作 暂停状态:activity失去焦点,但对用户可见,(如在其上有一个Toast或者alertDialog),此状态的活动是存活的,它保留着所有状态和成员信息,在内存极小时候可能被杀掉 停止状态:完全被另一个activity所遮挡,但他保留了所有信息,只是对用户不可见,其他地方需要内存往往被杀掉 非活动状态
Unity优化大全(四)之CPU-GC(内存回收)和Sricpt
前言:            对于GC,大家可能不陌生把,也就是内存回收。同时笔者在做自己的小游戏中发现很多细节都会影响GC,现在就给大家梳理下一些需要注意的地方。 进入主题:               在说CPU优化时,谈起GC是不是觉得很奇怪?其实笔者不这么觉得,虽然GC是用来处理内存回收的,但是却增加了CPU的开销。因此对于GC的优化目标就是尽量少的触发GC。
DirectByteBuffer内存回收笔记
今天在看netty源码时候又再次遇到了DirectByteBuffer,关于DirectByteBuffer的内存回收机制,在netty框架中被封装的面目全非,但其回收机制也是万变不离其宗,下面这几篇简单易懂的文章就介绍了DirectByteBuffer的概念极其内存回收方式,在这里和大家分享一下: 文章列表 jvm堆外内存–DirectByteBuffer java...
程序里到底需要不需要手动调用System.gc()
最近做的项目,同事喜欢在很多类里面加上一个release()之类的方法,并且在最后会调用一次System.gc(),说是这样可以有效的释放资源.在实际测试中,调用System.gc()的确可以回收一部分内存.但是,这个时候通常程序会明显感觉卡一下.到底应不应该手动调用System.gc()呢?我上网查了很多资料,其中一份是诺基亚论坛的,开头就是关于GC的: [b]Description:[/b]...
android GC回收机制
不同系统不同型号的手机的GC机制是不同的System.gc()调用结果不同(立即GC或无反应)废弃内存回收频率不同大规模GC临界值不同对于加载图片来说,内存增加量是远大于图片大小的。临时变量的GC时机是完全不能保证的,我们可以理解为,GC线程还没有转到这个地方。System.gc()并不是立刻执行GC的。每点击一次按钮,内存消耗增加0.02MB,世界上没有免费的午餐,点击事件内部是会有新的对象产生...
malloc的内存用free释放后为何系统回收不了
在学习第七章7.8节时关于存储器分配这一块的时候,有个疑问,malloc
是否需要主动调用Bitmap的recycle方法?
一个图片加载到内存里,其实是有两部分数据组成,一部分是图片的相关描述信息,另一部分就是最重要的像素信息(这部分是有byte数组组成的),android系统为了提高对图片的处理效率,对于图片的处理都是调用了底层的功能(由C语言实现的),也就是说一个图片加载到内存里后是使用两部分的内存区域,简单的说:一部分是java可用的内存区,一部分是c可用的内存区,这两个内存区域是不能相互直接使用的,这个bitm
System.gc 没有立即执行
System.gc 没有立即执行 作为一个安卓开发人员,你一定见过OOM() 最近在做一个大图片加载的项目,由于内存实在是太小,需要对bitmap进行gc清空,这个时候我发现一个问题,GC的处理并不及时,为啥。。。。。。。 private void gcBitmap(Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycl...
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 { ...
Java 线程调用start()后会立即执行run()方法吗?
别想当然 问题 Java 线程调用start()后会立即执行run()方法吗? 我们在开发中,经常和线程打交道,有些东西总是司空见惯,想当然地认为某些事情理所当然... 但是今天偶然发现一个有趣的现象: class Test { public static void main(String[] args) { Sys...
Android中有没有必要调用Bitmap的recycle()
这篇博客时转载其他人的,具体我也忘记了。。。。 在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优化,是Android应用开发中比较重要的内容。   1) 要及时回收Bitmap的内存   Bitmap类有一个方法recycl
关于弱引用WeakReference的一点疑问
很多文章都这样解释弱引用: 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。 虽然垃圾回收器的优先级很低,但是不能保证在我们使用对象的时候它不执行gc啊。按照字面理解就...
java清理对象的时候“=null”与“gc”的比较
今天的话题是在清理对象的时候是使用=null还是gc,我们下面做出比较。1.写这篇文章的缘由之前我写了一篇文章是对象的清理(点击跳转),有一位网友给了另外一种方法,因此我特意使用visual vm来测试一下看看。2.使用检测工具 visual vm下载地址:https://java.net/projects/visualvm/downloads/download/release138/visual
java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)
JVM可以使用的内存分外2种:堆内存和堆外内存,堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误。使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer。C语言的内存分配和释放函数malloc/free,必须要一一对应,否则就会出现内存泄露或者是野指针的非法访问。java中我们需要手动释放获取的堆外内存吗
WeakHashMap是如何清除不用的key的
先把问题说清楚: WeakHashMap是主要通过expungeStaleEntries这个函数的来实现移除其内部不用的条目从而达到的自动释放内存的目的的.基本上只要对WeakHashMap的内容进行访问就会调用这个函数,从而达到清除其内部不在为外部引用的条目。但是如果预先生成了WeakHashMap,而在GC以前又不曾访问该WeakHashMap,那不是就不能释放内存了吗? 对应的两
python内存回收方式
原文:http://blog.sina.com.cn/s/blog_12c7a20b00102wrhn.html 关于对象的内存回收方式,会从垃圾回收,分代回收以及孤立引用环三个方面来介绍。   内存的回收方式 一.垃圾回收     1.垃圾回收的条件         Python解释器对正在使用的对象保持计数。当对象不再被引用指向的时候,垃圾收集器可以释放该对象,获取分配的内存。 ...
Redis 的过期策略以及内存回收机制
一、Redis过期策略  redis是如何处理过期的key?      分为2种:passive (被动)和active(主动)      所谓被动的处理方式就是 :当一些客户端进行访问的时候,秘钥被动过期,并且发现秘钥超时     只有被动是不够的,因为所有过期的秘钥是永远不会被访问的,所以Redis有自己的过期算法。     Redis 每秒运行10次 会执行以下概率算法: 从相关...
javascript闭包和立即执行函数
闭包—closure 先看一个闭包的例子。我们想实现一个计数器,最简单的方法就是定义一个全局变量,计数的时候将其加1。但是全局变量有风险,哪里都有可能不小心改掉它。那局部变量呢,它只在函数内部有效,函数调用完后它就没了,而且全局没法使用。那我们用想让计数器全局使用,又不想让这个变量被随便修改怎么办。这就需要闭包了: function count(){ var i=0; ret...
php 自定义函数 和 系统函数 的变量从内存释放
动态变量在函数执行完毕后立即释放静态变量是通过static关键字声明的变量,当第一次调用函数的时候相当于初始化函数,当函数执行完毕后,静态变量并没有释放,而是保存在静态内存中,下次调用时则是先从静态内存中取值接着执行.函数是通过return语句返回一个变量。返回的变量从全局符号表中获取一个实体并将其refcount的值增加1.当函数结束时,函数的符 号表将被销毁。在销毁的过程中,Zend引擎将遍历符
关于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...
jvm堆外内存(直接内存)
                                     堆外内存(直接内存) 堆外内存,又被称为直接内存。这部分内存不是由jvm管理和回收的。需要我们手动的回收。 堆内内存是属于jvm的,由jvm进行分配和管理,属于"用户态",而推外内存是由操作系统管理的,属于"内核态" 在jdk1.4中新加入了NIO类,他可以调用native函数库直接分配堆外内存,然后通过java堆中的...
GC在堆和方法区的内存回收
对象的存活判断对象是否存活,主流实现是可达性分析。 可达性算法的基本思路,通过一系列为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain), 当一个对象到GC Roots 没有任何引用链相连时,相当于图论的从GC Roots不可达,则这个对象不可用。 引用类型 -* 强引用* 只要强引用还存在,垃圾收集器永远不会收掉被引用的
Java GC及堆内存
堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
【C++进阶】从内存管理、内存泄漏、内存回收探讨C++内存管理
原文地址:http://www.cr173.com/html/18898_all.html 文章很棒,忍不住转载了 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关
4种GC方法+分代回收+触发GC情况+内存申请过程
①引用计数 对象增加一个引用时,引用数+1。减少一个时,引用数-1。当进行垃圾回收时,只回收引用数为0的对象。面对互相引用无解,方法比较老,基本弃用 ②标记+清除 从根节点遍历标记对象,然后遍历整个堆,清除没有标记的对象。 缺点:运行效率不高,产生了内存碎片,运行时需要暂停应用 ③复制 将内存分为2个区域(区域a和区域b),一个区域空着(区域a),另一个区域(区域b)放
Android onFinish()不会回收内存

 正常情况下,只需要关心自己的app是否会内容泄露,当设备内存不足时,我们的数据是否显示正确,页面是否能正常打开,保证app不会carsh。 我们关闭一个页面会调用finish()方法,然后再onDestroy()方法里面做一些释放操作,但是我们怎么知道这个Activity里面的内容有没有被释放了。 adb 提供了一个命令 adb shell dumpsys mem...
关于c++ stl 内存回收问题
最近用到c++  stl 的map和vector来处理大量数据,发现内存实在是个问题,网上对这个问题也讨论的很多,现就我自己的实验和网上的讨论做下总结。 关于vector:         这个好像没什么问题,用swap系统可以回收内存,作用域结束(比如声明一个vector为局部变量的函数退出后)也会自动系统也会自动回收。 关于map:         在linux (CentOS rel
探究Android 关于Activity调用finish()方法后的内存释放情况
公司一直在做自己的硬件产品,但是运行内存只有512M,所有一旦后台的驻留应用过多,前台的应用就会很卡断。当然,原因有很多,我们产品的cpu有瓶颈,计算过慢,导致卡断。后台的常驻服务和应用过多,像QQ,微信,360,豌豆荚之类的。运行内存不足,内存管理机制就开始起作用,其中又涉及到swap分区等linux的相关知识…其实我们做应用层的,正常情况下,只需要关心自己的app是否会内容泄露,当设备内存不足时
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 有产品经理这个课程吗 人工智能是深度学习吗