2019独角兽企业重金招聘Python工程师标准>>>

在软件开发过程中,Java开发者往往不用关心JVM内存的申请和回收,因为JVM会统一管理对像内存空间的申请和回收。而c/c++开发中,开发者可以自已去管理内存.这中间有管理好的,有管理不好的。比如一个新手写的基于C/C++的server上线后,可能因为内存分配问题,经常宕机,而一个基于Java的Server上线后,也会碰到反应慢,打不开,OutOfMemory等情况。

虽然JVM GC会统一管理对象的回收,但它也不是无所不能的,它需要大家去了解它,帮助它更好地管理我们server端的内存。

系统在运行的过程中会不断产生新的对象,这些新的对象会占用一定的内存空间。内存空间是有限的,但对象会不断的产生,所以JVM会定期去清理那些被废弃的对象(通过根搜索算法,GCRoot无法达到的对象)。这时候就会产生几个问题:

定期:什么时间? a.并发,一边工作,一边清理 b.暂停所有工作,清理废弃对象。

从最早期的JVM垃圾回收机制来看,JVM并没有采取a方式,而是采用了b方式。最早期的Serial垃圾回收器的工作方式是"Stop the World". 为什么JVM没有采用a方式呢?暂不讨论。 "Stop the world"就意味着JVM需要停下手中的工作,来整理一下内存空间。这个时候Server就有了一个停顿时间,如果一个Server运行了100s,GC一次用了2s,那么它的吞吐量可以看成98%。

下面展示了GC所占时间,系统吞吐量带来的影响。

是不是GC所占时间越短,系统的吞吐量越高?right! 首先感谢那些默默为提高JVM GC效率作出杰出贡献者的大神们!

回忆一下,常见的垃圾回收算法:

废弃对象:简单来讲就是没有被GCRoot直接或间接引用到的对象。

标记清除: 标记废弃的对象,直接清除。 会造成内存碎片。

标记整理: 在标记清除算法的基础上,最后需要整理一下内存空间。消除碎片

分代复制:把空间分成几块,把有用的对象copy到另一块,然后整块清除原来的那一块。频繁对象的复制,耗时。

只有这些是不够的,大神们又发现了部分对象在垃圾回收的过程中,它们的命很硬,每次都是走走过场。

下图中我们可以发现,大部分对象的生命都很短,很早就被废弃了。

最后大神们为每个对象加上一个年龄,每经历一次GC年龄就加1.超过一定的年龄的对象群众不需要频繁的去做GC.  这个时候就发现了两个群体。一个群体是生命比较短暂,另一个群体生命比较长。即年青代和老年代。

年青代每次GC存活的对象比较少,分代复制算法比较适合它们。因为它们需要复制很少。 老年代每次GC存活的对象比较多,比较适合标记整理算法。所以这个时候存在不同年代的垃圾收集器。但凡事无绝对的,还需要具体情况具体分析。

同时随着硬件的提高,大部分服务器已经是多CPU,这个时候就可以考虑使用基于并行的垃圾收集器。

Reference:

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

转载于:https://my.oschina.net/zookeeper/blog/183294

Java Virtual Machine Garbage Collection浅析相关推荐

  1. eclipse failed to create the java virtual machine 问题图文解析

    eclipse failed to create  the java virtual  machine 解决方法: 1.问题现象 2.java虚拟机初始化失败!寻找eclipse解压路径 3.寻找ec ...

  2. ubuntu linux下解决“no java virtual machine was found after searching the following locations:”的方法

    ubuntu linux下解决"no java virtual machine was found after searching the following locations:" ...

  3. Eclipse启动出现“Failed to create the Java Virtual Machine”错误

    Failed to create the Java Virtual Machine的本质是JVM内存分配不足. 启动eclipse的时候,JVM会自动分配内存,常见的包括Java堆,新生代和永久代的内 ...

  4. Flash Builder4.6 无法启动,并且报 Failed to create the Java Virtual Machine (2—可能更好些)...

    转自:http://blog.csdn.net/major_/article/details/7232886 Flash Builder 4.6 启动出错, Failed to create the ...

  5. java machine 报错_Eclipse启动时报错:No java virtual machine

    第一次碰到这个问题,因为Eclipse是同学拷贝过来给我的. 错误提示如下: A java Runtime Environment (JRE) or Java Development Kit (JDK ...

  6. 错误:Failed to create the Java Virtual Machine

    引用:http://apps.hi.baidu.com/share/detail/30819988 以前用的eclipse-jee因为在部署项目过程中总是出现bug被我删除.今天去eclipse官网又 ...

  7. Failed to create the Java Virtual Machine

    以前用的eclipse-jee因为在部署项目过程中总是出现bug被我删除.今天去eclipse官网又下了一个Eclipse IDE For Java EE Developers. 版本是:eclips ...

  8. 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  9. Java Virtual Machine Stacks(虚拟机栈)

    经过上面的分析,类加载机制的装载过程已经完成,后续的链接,初始化也会相应的生效. 假如目前的阶段是初始化完成了,后续做啥呢?肯定是Use使用咯,不用的话这样折腾来折腾去有什么意义?那怎样才能被使用到? ...

最新文章

  1. 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解
  2. RHEL6.3配置文件共享(5) Samba服务之三
  3. step1 . day7 C语言基础练习之指针和函数
  4. Linux静态库和动态库学习总结
  5. android各个版本的名称和更新(转)
  6. mysql必须安装在c盘吗_家用冷热水管保温棉必须装吗?水管保温棉选购及安装攻略分享...
  7. AngularJS-Hello World
  8. JS中的基本数据类型与引用数据类型
  9. Unable to add window -- token android.os.BinderProxy---Android原生开发工作笔记142
  10. 软件度量五步法包括_软件交付效能度量——从吞吐量和稳定性开始
  11. Linux c modbus 线程,Modbus TCP Slave Thread - 设置和获取寄存器值
  12. 【蓝桥杯单片机组模块】13、NEC 红外通信 - vs1838B
  13. 汇总一下那几个常用定理 高斯定理 泊松方程 亚阈值电流 跨导
  14. 程序员不能错过的20个学习网站
  15. 最优化方法(学习笔记)-第二章凸集
  16. 2021年南京大学软件工程专硕考研初试410分(数学满分)总成绩第二上岸经验贴
  17. Kong API Gateway 管理API详解
  18. no openvas scap database found. (tried /var/lib/openvas/scap-data/scap.db)错误
  19. 冯诺依曼结构计算机方案包含3个要点,冯诺依曼体系结构计算机的要点和工作过程.doc...
  20. java freemarker 导出富文本到Word文档

热门文章

  1. mysql虚拟列表_「前端进阶」高性能渲染十万条数据(虚拟列表)
  2. 海洋CMS仿RiPro主题风格自适应模板
  3. 0间隔24h采集线报+源码的资源网
  4. 源商城系统V1.0仿卡盟
  5. EduSoHo精品在线教育点播系统网站源码
  6. Web开发人员应当知道的15个开源项目
  7. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程
  8. js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
  9. PHP 判断用户语言跳转网页
  10. 数学建模1(历年问题与模型)