• 记录JVM垃圾回收算法


    垃圾回收算法可以分为三类,都基于标记-清除(复制)算法:

    • Serial算法(单线程)
    • 并行算法
    • 并发算法

    JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法。

    稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并发算法适用于交互性高的一些程序。经过观察,并发算法会减少年轻代的大小,其实就是使用了一个大的年老代,这反过来跟并行算法相比吞吐量相对较低。

    还有一个问题是,垃圾回收动作何时执行?

    • 当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC
    • 当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代
    • 当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载

      另一个问题是,何时会抛出OutOfMemoryException,并不是内存被耗空的时候才抛出

    • JVM98%的时间都花费在内存回收
    • 每次回收的内存小于2%

      满足这两个条件将触发OutOfMemoryException,这将会留给系统一个微小的间隙以做一些Down之前的操作,比如手动打印Heap Dump。

  • 相关阅读:
    easyui的datagrid右侧没有边框线
    移除input在type="number"时的上下箭头
    端口被占用的解决办法
    给DOM操作生成的元素添加事件
    前端工具——Gulp篇
    python类型学习
    python对象学习
    Python之系统交互(subprocess)
    如何准确高效的获取数据库新插入数据的主键id
    接口和抽象类有什么区别
  • 原文地址:https://www.cnblogs.com/superpang/p/5309847.html
Copyright © 2020-2023  润新知