java程序员不懂JVM内存回收,两年后也是个菜鸟

在学java程序员的时候,如果你还不懂JVM内存回收,那么你就只能是个很一般的程序员菜鸟了,那么什么是JVM内存回收呢?今天我们就来学习,都还不深入了解在上以前的课程中达内培训老师说过“JVM(三)内存回收(一)”我讲到了垃圾回收的几种算法,算是解决了之前提到的3个问题中的最后一个。

关于内存回收,还应该了解常用的内存回收器(GC Collector),即执行上述回收算法的引擎。

【垃圾回收器】

Serial / Serial old 回收器:从名字的字面意思就能明白,这两个是串行垃圾回收器。请看下图:

Serial/Serial Old收集器运行示意图

昆明达内培训老师从图中可以看出,当到达“安全点”的时候,所有的用户线程都被挂起,即“Stop the

world”发生了,然后再由单个GC线程来回收所有不需要使用的对象的内存。这里需要注意的是:

在新生代(serial)中,采用的复制算法进行垃圾回收

在老年代(serial old)中,则是采用的标记-整理算法进行垃圾回收

这两个收集器一般不建议在多处理器的服务器端使用,如果要使用,一般用在内存很小的桌面应用程序或者单核(或少核)的CPU服务器上。

【回收器】

这三个回收器均为并行回收器,其中,除了Parallel

old用于老年代回收外,另外两个都用在新生代。其并行主要体现在:Serial回收器在GC阶段只有单个线程进行GC,而这些回收器,会存在多个GC线程。

【新生代两个并行收集器区别】

ParaNew

除Serial收集器之外,只有它能和CMS搭配使用;另外,它更注重的是缩短停顿时间,达到更好的用户体验,比较适应用作与用户交互的应用程序上。使用

-XX:+UseConcMarkSweepGC选项默认会被指定为新生代的收集器,而使用-XX:+UseParaNewGC选项来强制指定它为新生代收集器;

【CMS 回收器】

CMS GC (-XX:+UseConcMarkSweepGC),其工作过程比之前的任何一个GC

Collector都要复杂,但是对低时延的应用非常有用。下面我们通过和Serial GC对比一下来说明是怎么样做到更低时延的。

Parallel Scavenge

则是更注重吞吐量的一个收集器,所谓的吞吐量就是“运行用户代码的时间/(运行用户代码时间+垃圾收集时间)”,主要适合在后台需要大量运算而不需要交互太多的任务。

另外一个最大的不同是,该收集器在设定了虚拟机的优化目标之后,如指定了-Xmx,并且指定了MaxGCPauseMillis(更关注最大停顿时间)或GCTimeRatio(更关注吞吐量),再选择参数-XX:+UseAdaptiveSizePolicy,使用自适应功能之后,虚拟机会自动根据收集到的系统性能监控信息,动态调整新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,从而提供最合适的停顿时间或者最大的吞吐量。

老年代的并行收集器(Parallel old),是Parallel

Scavenge的老年代版本,使用多线程+“标记-整理”算法实现。二者搭配之后,主要用于比较关注高吞吐量、CPU敏感的应用系统。-XX:+UseParallelOldGC来指定。

0元课程抢先听,扫码可得机会!

java垃圾回收菜鸟_java程序员不懂JVM内存回收,两年后也是个菜鸟相关推荐

  1. java ide 的优劣_Java程序员的困惑 Java IDE到底怎么选

    原标题:Java程序员的困惑 Java IDE到底怎么选 Eclipse和IntelliJIDEA可以说是程序员们最常用的两个IDE开发工具了.IntelliJIDEA被认为是目前Java开发效率最快 ...

  2. java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...

    [新朋友]点击标题下面(↑)蓝色字"Java那些事"关注 [老朋友]点击右上角,转发或分享本页面内容 这是我以前写的<java程序员由笨鸟到菜鸟>系列博客,每天更新一篇 ...

  3. java有哪些技术_Java程序员,最常用的20%技术有哪些?

    两个月,这让我想到了我当年第一份工作,也是两个月从零学JAVA.当时就买了3本书,强啃了6周.记住一点,时间有限,别听网上很多大牛的,他们说的太杂.你要抓重点,你只要让人家知道,你足够初级开发就可以了 ...

  4. java增删改查_Java程序员你真的甘心只做增删改查吗

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 最 ...

  5. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?

    在Java程序界流行着一种默认的说法叫"黄金5年",意思是说,一个Java程序员从入职的时候算起,前五年我选择直接影响着整个职业生涯的发展方向和薪资走向. 而这5年,也决定了一个程 ...

  6. 用java制作心理测试软件_Java 程序员必备的10款开源工具

    Java世界中存在许多工具,从Eclipse,NetBeans和IntelliJ IDEA等著名的IDE开始到Java开发人员应该知道的JVM分析和监视工具,如JConsole,VisualVM,Ec ...

  7. 招聘java是什么意思_java程序员,一般招聘都要求些啥

    原标题:java程序员,一般招聘都要求些啥 java程序员,一般招聘都要求些啥?某位企业领导说,他不能确认什么样的人一定是他想要的,因为优秀的程序员精通的点并不完全相同,项目也千差万别,但至少要有几个 ...

  8. java软件学习网站_Java程序员必看的十大学习网站

    无论是作为资深Java程序员,还是刚刚Java入门的小白,都不可缺少平时学习的网站.以下小编收集了Java程序员必看的十大学习网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题.面试 ...

  9. java斗图表情_java程序员斗图表情包 为何总是输

    原标题:java程序员斗图表情包 为何总是输 程序员之间的斗图表情包, java真的输惨了! 表情包成了人与人聊天中不可少的分量,陌生人聊天表情包丢出去妥妥的拉近关系变熟络啊(¬_¬) 而且可以用表情 ...

最新文章

  1. spark更改分区_spark RDD分区是否可以指定分区
  2. memcache-session-manager(flexjson)
  3. MNIST手写数字识别
  4. leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
  5. SAP ABAP实用技巧介绍系列之ABAP取中文字符串的字节长度
  6. ITFriend创业败局(四):菜鸟CEO的自我修养
  7. excel怎么设置打印区域_别再浪费打印纸了!这样设置,Excel表格再大都能打印成一页!...
  8. 关闭弹出窗体,刷新父页面
  9. 这三个Offer,你怎么选?
  10. python深拷贝_python 深拷贝与浅拷贝的区别
  11. JavaScript—模块化(26)
  12. idc机房建设费用_机房建设方案及报价清单.doc
  13. HDU - 6609
  14. 希尔顿欢朋中国第200家酒店在杭州开业;玲娜贝儿在上海迪士尼全球首发亮相 | 全球旅报...
  15. Flutter实现微信支付和iOS IAP支付,ndk开发入门
  16. python 1、输入a,b,c解二元一次方程;2、克莱姆法则解线性方程;3、输入今天之后未来的天数,显示今天是星期几;4、输入一个数,检测是否能被5和6整除;5、输入人民币和美元的汇率和转换金额;
  17. 矩阵等价、相似、合同的定义及性质
  18. 蓝牙、WiFi、ZigBee三大无线通信技术协议模块哪一个是最好的?
  19. Hive转换常用函数
  20. ajaxSubmit提交数据重复

热门文章

  1. 一文看懂Filter过滤器
  2. Netfilter的Mangle机制
  3. 矢量量化(Vector Quantization)(转)
  4. 沉没的蜀山---探索东方神话传说中的泰坦尼克
  5. 微信小程序开发中常见问题及解决方法
  6. linux 电源管理驱动编写
  7. 使用了代理服务器之后突然浏览器不能打开网页的解决方法
  8. 恒驰喜讯 | 荣誉奖项再+8!聚势沪上,共拓山海,2023年华为上海政企合作伙伴大会成功举办
  9. 《第七天》之第六天鼠妹和伍超为什么活不下去
  10. 进销存行业的“年中总结”——库存盘点篇