请问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
System.gc 没有立即执行
System.gc 没有立即执行 作为一个安卓开发人员,你一定见过OOM() 最近在做一个大图片加载的项目,由于内存实在是太小,需要对bitmap进行gc清空,这个时候我发现一个问题,GC的处理并不及时,为啥。。。。。。。 private void gcBitmap(Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycl...
malloc/free和new/delete释放后的内存系统会马上回收吗?
         用户 free 掉的内存并不是都会马上归还给系统,ptmalloc 会统一管理 heap 和 mmap 映射区域中的空闲的 chunk,当用户进行下一次分配请求时,ptmalloc 会首先试图在空闲的chunk 中挑选一块给用户,这样就避免了频繁的系统调用,降低了内存分配的开销。 ptmalloc将相似大小的 chunk 用双向链表链接起来,这样的一个链表被称为一个 bin。P...
C#如何立即回收内存
1.把对象赋值为null 2.立即调用GC.Collect(); 注意:这个也只是强制垃圾回收器去回收,但具体什么时候执行不确定。  代码: public partial class Form1 : Form { [System.Runtime.InteropServices.DllImportAttribute("kernel32.
Bitmap调用recycle()回收内存
Bitmap调用recycle? When?     Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间。   Q 1: Bitmap是否有调用recycle方法的必要性? A: 嵌入式系统总是格外注重空间的问题,不小心的话就会有OOM。但是应用层使用java的android平台有其天然的优势【java语言有自己的垃圾回收,android平
解决Java线程池任务执行完毕后线程回收问题
http://www.cnblogs.com/pengineer/p/5011965.html       对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所应当是非常智能的,线程的生命周期应该完全由Java本身控制,我们要做的就是添加任务和执行任务。但是,最近做文档批量上传同步时发现线程池中的所有任务执行完毕后,线程并没有停止,然后做了一个测试,发现确实如此:   问题及
GC判断哪些内存需要回收
GC的问题,主要分为:1、哪些内存需要回收?2、什么时候回收?3、如何回收?这里主要讲第一个问题。 1、哪些内存需要回收? 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”,哪些已经“死去”(即不可能再被任何途径使用的对象)。 (1)引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是...
free()后内存不释放问题 - 内存缓冲池技术
起因 下面这段代码执行后,内存有增无减,增加了200M,iOS平台200M不能接受了 // STL 集合类 void test1() { list<int> mList; for (int i=0; i<1000000; i++) { mList.push_back(i); } mList....
JVM内存回收之finalize()方法
finalize()方法        之所以要使用finalize(),是存在着垃圾回收器不能处理的特殊情况。假定你的对象(并非使用new方法)获得了一块“特殊”的内存区域,由于垃圾回收器只知道那些显示地经由new分配的内存空间,所以它不知道该如何释放这块“特殊”的内存区域,那么这个时候java允许在类中定义一个由finalize()方法。       特殊的区域例如:1
关于弱引用WeakReference的一点疑问
很多文章都这样解释弱引用: 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。 虽然垃圾回收器的优先级很低,但是不能保证在我们使用对象的时候它不执行gc啊。按照字面理解就...
android GC回收机制
不同系统不同型号的手机的GC机制是不同的System.gc()调用结果不同(立即GC或无反应)废弃内存回收频率不同大规模GC临界值不同对于加载图片来说,内存增加量是远大于图片大小的。临时变量的GC时机是完全不能保证的,我们可以理解为,GC线程还没有转到这个地方。System.gc()并不是立刻执行GC的。每点击一次按钮,内存消耗增加0.02MB,世界上没有免费的午餐,点击事件内部是会有新的对象产生...
关于Activity调用Ondestroy()方法之后内存管理器为什么没有释放占用资源
最近在研究activity 执行了finish之后为什么还有很多资源没有释放的问题,关于这个原因的产生,最直接的想法就是activity里面还有很多资源没有手动释放,因为大家知道,activity只不过是一个高度抽象的UI组件,他仅仅只是一个控制界面的功能,包括分发touch时间还有一些列的作用,展示界面的工作是交给DecorView下的所有view以及viewGroup,所以我们可以认为acti
Java直接内存分配和释放方式
一. 正常分配,回收由GC负责添加jvm启动参数:-verbose:gc -XX:+PrintGCDetails -XX:MaxDirectMemorySize=40M 循环执行以下代码,可以看到频繁fullGC.ByteBuffer buffer = ByteBuffer.allocateDirect(10 * 1024 * 1024); 当然我也找到一种不需要GC回收由程序员自己回收的方式,不推
malloc之后再进行free,free的内存空间一定被OS回收了吗?(转自知乎)
1. 这道题是15年鹅厂研发类实习生的笔试题,我不知道答案。 2. 知乎上有人问同样的问题,在此贴出来学习。原文链接 提问者: 我对malloc和free的理解: malloc时,假如申请了1KB的空间,那么操作系统有可能给你一个大于1KB的数值用以备用。同时,malloc时会用一个tag记录本次申请空间的大小,free的时候仅仅将tag清零。 但我有两个问题,比如在基于glibc的Li
对象复活
http://blog.csdn.net/dc_726/article/details/7934101 附:对象复活 在根搜索中得到的不可达对象并不是立即就被标记成可回收的,而是先进行一次 标记放入F-Queue等待执行对象的finalize()方法,执行后GC将进行二次标记,复活 的对象之后将不会被回收。因此,使对象复活的唯一办法就是重写finaliz
DirectByteBuffer内存回收笔记
今天在看netty源码时候又再次遇到了DirectByteBuffer,关于DirectByteBuffer的内存回收机制,在netty框架中被封装的面目全非,但其回收机制也是万变不离其宗,下面这几篇简单易懂的文章就介绍了DirectByteBuffer的概念极其内存回收方式,在这里和大家分享一下: 文章列表 jvm堆外内存–DirectByteBuffer java...
是否需要主动调用Bitmap的recycle方法?
一个图片加载到内存里,其实是有两部分数据组成,一部分是图片的相关描述信息,另一部分就是最重要的像素信息(这部分是有byte数组组成的),android系统为了提高对图片的处理效率,对于图片的处理都是调用了底层的功能(由C语言实现的),也就是说一个图片加载到内存里后是使用两部分的内存区域,简单的说:一部分是java可用的内存区,一部分是c可用的内存区,这两个内存区域是不能相互直接使用的,这个bitm
activity的四种状态以及内存回收优先级
1.activiti的四种状态  活动状态:在屏幕的前台,获取了焦点,可以响应用户操作 暂停状态:activity失去焦点,但对用户可见,(如在其上有一个Toast或者alertDialog),此状态的活动是存活的,它保留着所有状态和成员信息,在内存极小时候可能被杀掉 停止状态:完全被另一个activity所遮挡,但他保留了所有信息,只是对用户不可见,其他地方需要内存往往被杀掉 非活动状态
c# 关于内存回收GC的简单总结
GC 废弃对象的4种方式 方式 例子 被释放的对象 将null引用赋值给对象的仅剩引用。(赋空值) ClassA a = new ClassA();a=null; 没有一个引用引用它时 将不同对象的引用赋值给对象的仅剩引用。(赋新值) a1 = new ClassA();a2 = new ClassA(); a1 = a2; a1的原先引用对象 ...
java中ArrayList之clear内存回收
右边为调用clear后内存情况 现将list.clear改为 list=null,再看看运行情况 赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收 clear()只是清除了对象的引用,使那些对象成为垃圾
对于Activity被finish之后,资源的释放需要注意以下几点。
1)如果有其他类对context本身有引用的话,Activity被finish之后 是不会释放资源的。 2)还有如果其他类中有控件未被置空,内存也下不来。注意这个其他类指的是非GameActivity类, Activity的类,就不需要依次去将控件置空。 3)华为的手机在eclipse中可以直接手动清除资源,三星、摩托 等手机只有当手机内存不足的时候才会被清除。
Unity优化大全(四)之CPU-GC(内存回收)和Sricpt
前言:            对于GC,大家可能不陌生把,也就是内存回收。同时笔者在做自己的小游戏中发现很多细节都会影响GC,现在就给大家梳理下一些需要注意的地方。 进入主题:               在说CPU优化时,谈起GC是不是觉得很奇怪?其实笔者不这么觉得,虽然GC是用来处理内存回收的,但是却增加了CPU的开销。因此对于GC的优化目标就是尽量少的触发GC。
java内存回收之finalize()方法原理
确认对象已死亡: 1、引用计数算法:算法原理是 给每个对象中添加一个引用计数器,每当有地方引用它时,计数器值就加1,当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能再被使用的。 2、可达性分析算法 :原理是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(reference Chain),当一个对象到GC ...
java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)
JVM可以使用的内存分外2种:堆内存和堆外内存,堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误。使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer。C语言的内存分配和释放函数malloc/free,必须要一一对应,否则就会出现内存泄露或者是野指针的非法访问。java中我们需要手动释放获取的堆外内存吗
Java 线程调用start()后会立即执行run()方法吗?
别想当然 问题 Java 线程调用start()后会立即执行run()方法吗? 我们在开发中,经常和线程打交道,有些东西总是司空见惯,想当然地认为某些事情理所当然... 但是今天偶然发现一个有趣的现象: class Test { public static void main(String[] args) { Sys...
WeakHashMap是如何清除不用的key的
先把问题说清楚: WeakHashMap是主要通过expungeStaleEntries这个函数的来实现移除其内部不用的条目从而达到的自动释放内存的目的的.基本上只要对WeakHashMap的内容进行访问就会调用这个函数,从而达到清除其内部不在为外部引用的条目。但是如果预先生成了WeakHashMap,而在GC以前又不曾访问该WeakHashMap,那不是就不能释放内存了吗? 对应的两
进程结束new出的内存会回收吗?
      今天调试程序,弄得有点纠结。无意间,和一帮同事讨论起一个问题:进程结束操作系统会回收new的内存吗?在自己的印象中,一直固执地认为,在使用C++操作分配对象内存后,如果程序员自己不用相应的delete操作回收的话,这块从堆内存是一直存在。在讨论中,有同事提醒说,在进程结束后,new操作的内存会被回收。但也只是结论,也说不出具体理由。      没关系,何不google一下,一查下去
malloc的内存用free释放后为何系统回收不了
在学习第七章7.8节时关于存储器分配这一块的时候,有个疑问,malloc
程序里到底需要不需要手动调用System.gc()
最近做的项目,同事喜欢在很多类里面加上一个release()之类的方法,并且在最后会调用一次System.gc(),说是这样可以有效的释放资源.在实际测试中,调用System.gc()的确可以回收一部分内存.但是,这个时候通常程序会明显感觉卡一下.到底应不应该手动调用System.gc()呢?我上网查了很多资料,其中一份是诺基亚论坛的,开头就是关于GC的: [b]Description:[/b]...
【C++进阶】从内存管理、内存泄漏、内存回收探讨C++内存管理
原文地址:http://www.cr173.com/html/18898_all.html 文章很棒,忍不住转载了 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关
Java内存回收方式
文章转载自https://mp.weixin.qq.com/s/hw5d0FJXzaDZPN-vRPzjSA Java内存回收方式 Java判断对象是否可以回收使用的而是可达性分析算法。 在主流的商用程序语言中(Java和C#),都是使用可达性分析算法判断对象是否存活的。这个算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索
php 自定义函数 和 系统函数 的变量从内存释放
动态变量在函数执行完毕后立即释放静态变量是通过static关键字声明的变量,当第一次调用函数的时候相当于初始化函数,当函数执行完毕后,静态变量并没有释放,而是保存在静态内存中,下次调用时则是先从静态内存中取值接着执行.函数是通过return语句返回一个变量。返回的变量从全局符号表中获取一个实体并将其refcount的值增加1.当函数结束时,函数的符 号表将被销毁。在销毁的过程中,Zend引擎将遍历符
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 { ...
GC内存回收深入研究
GO “非分代的、非紧缩、写屏障、并发标记清理”并发清理: 垃圾回收(清理过程)与用户逻辑并发执行 三色并发标记 : 标记与用户逻辑并发执行一般常用垃圾回收方法引用计数这是最简单的一种垃圾回收算法,和之前提到的智能指针异曲同工。对每个对象维护一个 引用计数 ,当引用该对象的对象被销毁或更新时被引用对象的引用计数自动减一,当被引用对象被创建或被赋值给其他对象时引用计数自动加一。当引用计数为0时则立即...
关于c++ stl 内存回收问题
最近用到c++  stl 的map和vector来处理大量数据,发现内存实在是个问题,网上对这个问题也讨论的很多,现就我自己的实验和网上的讨论做下总结。 关于vector:         这个好像没什么问题,用swap系统可以回收内存,作用域结束(比如声明一个vector为局部变量的函数退出后)也会自动系统也会自动回收。 关于map:         在linux (CentOS rel
Java GC及堆内存
堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
Java线程池任务执行完毕后回收线程
Java线程池任务执行完毕后回收线程 线程池中的所有任务执行完毕后,线程并没有停止,导致JVM出现OOM问题。后来查找了下面链接的资料,解决问题。 ref: http://www.cnblogs.com/pengineer/p/5011965.html 问题及现象: public static void main(String[] args) { BlockingQueue queu...
python内存回收方式
原文:http://blog.sina.com.cn/s/blog_12c7a20b00102wrhn.html 关于对象的内存回收方式,会从垃圾回收,分代回收以及孤立引用环三个方面来介绍。   内存的回收方式 一.垃圾回收     1.垃圾回收的条件         Python解释器对正在使用的对象保持计数。当对象不再被引用指向的时候,垃圾收集器可以释放该对象,获取分配的内存。 ...
采用伙伴系统算法编写内存分配和回收模拟程序
一、需求分析 动态分区和固定分区的方案都有缺陷,固定分区方案限定了活动进程的数目,并且如果可用分区的大小与进程大小非常不匹配则内存空间的利用率非常低。而动态分区的维护十分的复杂,并且引入了进行压缩的额外开销。伙伴系统作为一种折中的方案,能够克服固定分区和可变分区系统的缺陷,在并行系统中有广泛的应用。基于伙伴系统的优秀特点,本次综合实验将实现伙伴系统的典型功能。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 有产品经理这个课程吗 人工智能是深度学习吗