zoukankan      html  css  js  c++  java
  • JVM垃圾回收2

    1.Heap分区

    Young——保存刚实例化的对象,当该区被填满时,GC会将对象移至Old区。

    Older

    Permanent——负责保存反射对象

    2.JVM有两个GC线程

    第一个线程负责回收Heap的young区;

    第二个线程在Heap不足时,遍历Heap,将young区升级为Older区。Older区大小等于-Xmx减去-Xmn,不能将-Xms设得过大,第二个GC线程被迫运行时会降低JVM性能。

    3.为什么一些程序频繁调用GC?

    程序调用了System.gc()或Runtime.gc()。

    第三方程序调用了自己的GC()方法,此时需要参数来禁止这些GC;

    Java默认的Heap太小。

    频繁实例化对象,Release对象。尽量保存并重用对象。

    4. GC类型——四种

    第一种为单线程GC,也是默认的GC,适用于单CPU机器。

    第二种为Throughput GC,是多线程GC,适用于多CPU,使用大量的线程的程序。与第一种相比,不同之处在于GC在收集Young区是多线程的,但在Older区仍采用单线程。-XX:+UseParallelGC参数启动该GC。

    第三种为Concurrent Low Pause GC,类似第一种,适用于多cpu,并要求缩短因GC造成程序停滞的时间,这种GC在Older区回收的同时运行应用程序。             -XX:+UseConcMarkSweepGC参数启动该GC。

    第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间,这种GC可以在Young区回收的同时,回收一部分Older区对象。

    -Xincgc参数启动该GC。 

    5.注意事项

    增大Heap大小虽会降低GC的频率,但会加大每次GC的时间,当GC运行时,所有的用户线程都被暂停,即在GC期间,Java应用程序不做任何工作。

    Heap大小并不决定进程的内存使用量,因Java也为其它任务分配内存,如每个线程的Stack。 

  • 相关阅读:
    Python2 和 Python3的区别 更新中
    CentOS下图形界面安装_Orcaale 11g
    Nmap_使用介绍
    shell_innobackup增量备份步骤
    shell_跳板机推送公钥
    shell_clean_log
    shell_xtrabackup_backup_mysql
    gitlab免密登录
    gitlab安装与部署
    git合并分支
  • 原文地址:https://www.cnblogs.com/emily_fly/p/1753542.html
Copyright © 2011-2022 走看看