GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误

的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动

监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放

已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为垃圾收集器会

自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或

Runtime.getRuntime().gc() ,但 JVM 可以屏蔽掉显示的垃圾回收调用。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通

常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死

亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回

收器对某个对象或所有对象进行垃圾回收。在 Java 诞生初期,垃圾回收是 Java

最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过

境迁,如今 Java 的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常

觉得 iOS 的系统比 Android 系统有更好的用户体验,其中一个深层次的原因就在

于 Android 系统中垃圾回收的不可预知性。

补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量

垃圾回收等方式。标准的 Java 进程既有栈又有堆。栈保存了原始型局部变量,堆

保存了要创建的对象。Java 平台对堆内存回收和再利用的基本算法被称为标记和

清除,但是 Java 对其进行了改进,采用“分代式垃圾收集”。这种方法会跟 Java

对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象

移动到不同区域:

伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,

这里是它们唯一存在过的区域。

幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。

终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集

(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身

颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,

以便为大对象腾出足够的空间。

与垃圾回收相关的 JVM 参数:

-Xms / -Xmx — 堆的初始大小 / 堆的最大大小

-Xmn — 堆中年轻代的大小

-XX:-DisableExplicitGC — 让 System.gc()不产生任何作用

-XX:+PrintGCDetails — 打印 GC 的细节第 244 页 共 485 页

-XX:+PrintGCDateStamps — 打印 GC 操作的时间戳

-XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小

-XX:NewRatio — 可以设置老生代和新生代的比例

-XX:PrintTenuringDistribution — 设置每次新生代 GC 后输出幸存者

乐园中对象年龄的分布

-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老

年代阀值的初始值和最大值

-XX:TargetSurvivorRatio:设置幸存区的目标使用率

最新文章

  1. Xcode 运行cocos2dx弹出内部错误对话框(Internal Error)
  2. js回顾1
  3. [mysql] Some non-transactional changed tables couldn't be rolled back
  4. 【iCore3 双核心板】例程十四:FATFS实验——文件操作
  5. spring2.0包说明【转】
  6. Java——Java日期转Sql日期
  7. WebApi接口访问频率控制的实现
  8. codeforces 463D Gargari and Permutations(dp)
  9. HDU-1045 Fire Net
  10. Sql操作表字段
  11. C++ Primer 5th 第2章 变量和基本类型
  12. bzoj1272 Gate Of Babylon
  13. OpenStack-Neutron-VPNaaS-代码
  14. 卸载HDP大数据平台
  15. 分布式文件系统FastDFS
  16. Nginx配置项优
  17. springboot:Java模板引擎Thymeleaf介绍
  18. 7、完整版的strcpy函数
  19. 用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)
  20. 2016011998+sw

热门文章

  1. Banmabanma的writeup
  2. Vue UI API简单笔记
  3. Smartbi扩展性怎么样,是否方便扩展开发产品已有功能?
  4. 【windows 访问控制】七、window 访问控制编辑器(Access Control Editor)
  5. 【基础知识】CPU 指令执行的五个阶段,cpu就是用来执行指令的
  6. linux设置 自定义脚本开机启动
  7. kNN(k近邻)算法代码实现
  8. 有关base64的作业
  9. C# form捕捉方向键事件
  10. 微信小程序简易富文本