何为GC

GC是garbage collection的缩写,垃圾回收的意思,也可以叫Garbage Collector,也就是垃圾回收器

垃圾回收器的职责

分配内存

确保任何被引用的对象保留在内存中

回收不能通过引用关系找到的对象的内存

GC回收算法

1. 标记回收算法(Mark and Sweep GC)

从"GC Roots"集合开始,将内存整个遍历一次,保留所有可以被GC Roots直接或间接引用到的对象,而剩下的对象都当作垃圾对待并回收,这个算法需要中断进程内其他组件的执行并且可能产生内存碎片

2.复制算法

将现有的内存空间分为两块,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收

3.标记压缩算法(Mark-Compact)

先需要从根节点开始对所有可达对象做一次标记,但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一段,之后清理半截外所有的空间,这种方法既避免了碎片的产生,又不需要两块相同的内存空间,因此其性价比比较高

4.分带

将所有的新建对象都放入年轻代的内存区域,年轻代的特点是对象会很快回收,因此在年轻代就选择效率较高的复制算法,当一个对象经过几次回收后依然存活,对象就会被放入老生代的内存空间,对于新生代适用于复制算法,而对于老生代则采取标记-压缩算法

引用

一个对象,当内存足够的时候,保留在内存中,如果内存紧张则可以抛弃它们,在JDK1.2之后将引用细分为:强引用,软引用,弱引用,虚引用

强引用

只要强引用存在,垃圾收集器不会回收掉被引用的对象

软引用

用来描述一个对象还有用,但并非必须的对象,在系统将要发生内存溢出异常之前,将会对这些对象进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常

弱引用

强度比软引用还弱,被弱引用关联的对象只能生存到下一个垃圾收集发生之前,所以内存是否足够都会被回收

虚引用

它是最弱的引用,有无这个引用完全不对其生存时间构成影响,也无法通过虚引用来获取一个对象实例,为一个对象设置虚引用关联的唯一目的就是能在这个对象垃圾税收器回收的时候收到一个系统通知

触发GC的条件

应用进程空闲的时候,GC会回收空闲进程的内存资源.

应用进程繁忙的时候,当需要的内存资源不足的时候,GC会强制执行回收优先级比较低的进程资源,如果还是不足,则再回收两次,还是不足则会报OOM.

减少GC开销的措施

尽量少显示的调用System.gc()

减少临时对象的引用

对象使用完毕之后,设置为null,这样会方便系统查找到空对象,更快回收掉内存

能使用基本数据类型的,就尽量不要使用引用类型,基本类型占用的资源比引用类型要小的多

尽量少的使用static变量,static变量是全局性,系统在堆中为其分配内存,GC无法回收该内存

对于需要使用变成的字符串变量,尽量使用StringBuider/StringBuffer,而不是String,String每赋值一次,就会重新分配一次内存

分散创建和删除对象的时间,一次性创建或者删除太多的对象,会导致内存突然变得紧张或者一次性释放太多,不利于内存的合理使用

android 强制垃圾回收,Android垃圾回收(GC)相关推荐

  1. android 强制全屏,[Android]设置Activity为全屏显示的两种方法

    1. 方法1:AndroidManifest.xml 里,Activity的 android:theme  指定为" @android :style/Theme.NoTitleBar.Ful ...

  2. android强制重启app,android比较便捷的重启APP的方法

    前言: 开发过程中,有项需求需要重启APP,谷歌之后都是清一色的代码,可惜自己试了之后真心没用,只能自己想办法了.(PS:百度就算了,对于程序员来说,百度简直就是"玩具度".个人感 ...

  3. android强制关掉应用,android应用程序强制关闭执行此查询

    您好我正在尝试执行此查询,但每次我在模拟器中运行时,它都会显示强制关闭消息.有人告诉我查询中有什么错误吗? public String searchRecord(String f) { Cursor ...

  4. Android强制使用3G,Android 强制2G/3G或WIFI 优先上网

    Android开发中有时候需要设定程序连接网络优先 2G/3G 或 WIFI,下面片段代码给出设置方法: public void setPreferredNetwork(int networkType ...

  5. android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...

    强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...

  6. java 强制垃圾回收_Java垃圾回收机制

    Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...

  7. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  8. 根可达算法的根_好屌好屌的「GC系列」JVM垃圾定位及垃圾回收算法浅析

    0x01 什么是垃圾 很简单,没有引用指向的任何对象都叫做垃圾(garbage). 什么是garbage 在某一内存空间中,Java程序制造了很多对象被引用,有的对象还引用别的对象,中途有对象不被需要 ...

  9. Android内存优化(二)之Bitmap的内存申请与回收(Android N和O的对比)

    在Android O上大面积的爆了大量native Bitmap相关的泄漏问题,最大能达到几十MB,开始怀疑是出现了native内存泄漏问题,但经分析后发现是Android N和Android O在处 ...

最新文章

  1. 用 Python 爬了点你们喜欢的小电影
  2. poj3352(强连通分量)
  3. 1、时间、FHS 学习笔记
  4. 软件测试的艺术第三章总结
  5. 如何理解 C# 中的 System.Void 类型?
  6. ASP.NET Core跨域设置
  7. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法
  8. CAVLC编解码原理与流程
  9. HTTPS协议详解:TLS/SSL握手过程
  10. 目标检测(一)--Objectness算法总体理解,整理及总结
  11. 控制反转和依赖注入的理解(通俗易懂)_Spring 的本质系列之依赖注入_一点课堂(多岸学院)...
  12. Win系统 - 微星 GS65 笔记本电脑开机黑屏
  13. c语言趣味菜单实验报告,DSP实验报告+心得体会
  14. 在web上制作动画(css3)
  15. 计算机录入大赛,计算机文字录入PPT幻灯片制作大赛策划书
  16. 区别 chown和chmod的用法
  17. php怎么判断账号已登录,PHP判断用户登录状态
  18. 基于Java+Swing+mysql图书管理系统
  19. 基于SOPC的MPEG-4视频播放器
  20. 无人机、无人船通信协议——MAVLink(V1.0、V2.0,心跳包,GPS定位,7种飞行模式)

热门文章

  1. 上面两点下面一个三角形_图形学底层探秘 - 更现代的三角形光栅化与插值算法的实现与优化...
  2. 方框滤波opencv-python
  3. 量化系统工程师需要学什么?
  4. 多目标跟踪评价指标总结——MOTA、IDF1、HOTA等
  5. 通过 Amazon 获取图书的封面
  6. 词云图制作:15张炫酷的词云图海报、PPT报告词云图、3D词云图,MagicCloud词云图一键制作软件
  7. Kubeedge 1.5 部署指南
  8. 如何在App Store用流量下载超过150M的软件?
  9. 中创生日会 | 烟火向星辰,所愿皆成真
  10. SpringBoot项目在使用Maven打包war中遇到的问题