最近项目中遇到了个关于JVM中GC线程数的问题,做一下简单的总结

问题场景:

server:均为 sun公司的solaris 系统 CPU 128个

项目8.1时使用的 java版本:   jdk1.6_u38 升级到9.1后使用jdk1.7_U21 下面两图分别为1.6和1.7时的prstat输出情况,可明显发现1.7的cpu使用情况增大

做了一个简单的测试(测试机型同上)代码如下,运行时不加任何JVM参数

public class Test {

public static void main(String[] args) {
        List<OOM> oom = new ArrayList<OOM>();
        int i = 0;
        int j = 0;
        while (true) {
            oom.add(new OOM());
            i++;
            if (i % 100000 == 0) {
                j++;
                System.out.println("force gc System.gc() " + j + " the i number is " + i);
                System.gc();
                if (i > 0) {
                    try {
                        System.out.println("the program is sleeping");
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    static class OOM {
        private String name;
    }
}

下面两图分别为1.6和1.7的测试的结果,可看到在1.7中大量CPU在运行着,而1.6基本都是sleep

翻阅了一下 oracle官网中的 JVM参数介绍 http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html 发现

JDK1.6中对默认的GC 回收方式为:-XX:-UseParallelGC  年轻代为并行年老代为串行,  1.6中引入了新的参数设置-XX:-UseParallelOldGC 年轻代为并行,年老代也为并行

而在JDK1.7中默认的GC回收方式则变成了-XX:-UseParallelOldGC

另外通过在1.6的环境中加上-XX:-UseParallelOldGC次参数可以看到与1.7任何参数不加 相同的结果

最终在项目加入了 -XX:ParallelGCThreads=<n>来限定gc执行时的线程数,默认如果不加入的话 等于你服务器中CPU的个数(CPU<=8的时候)或者 cpu*5/8 (CP>=8的时候)

jdk1.6与1.7垃圾回收的更多相关文章

  1. Java垃圾回收

    垃圾收集算法 引用计数 堆中的每个对象都有一个引用计数,当对象被引用时引用计数加1,当对象的引用被重新赋值或超出有效区域时引用计数减1,当一个对象被回收后,它所引用的对象的引用计算减1.当一个对象的引 ...

  2. JAVA的垃圾回收机制

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...

  3. JVM_垃圾回收串行、并行、并发算法(总结)

    一.串行 JDK1.5前的默认算法 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长 语法 -XX:+UseSerialGC 新生代.老年代使用串行回收 新生代复制算法 老年代标记-压缩 示例图 ...

  4. Java内存与垃圾回收调优

     Java(JVM)内存模型 正如你从上面的图片看到的,JVM内存被分成多个独立的部分.广泛地说,JVM堆内存被分为两部分——年轻代(Young Generation)和老年代(Old Generat ...

  5. Java Garbage Collection基础详解------Java 垃圾回收机制技术详解

    最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面试官问的时候也不存在问题,直到那天该公司一个做搜索的面试官问了我GC的问题,具体就是:老年代使用的是哪中垃圾 ...

  6. 全面分析Java的垃圾回收机制

    Java的堆是一个运行时数据区,类的实例(对象)从中分配空间.Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new.newarray.anewarray和mult ...

  7. Java虚拟机5:Java垃圾回收(GC)机制详解

    哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象.那么如何找到这些对象? 1.引用计数法 这个算法的实现是,给对象中添 ...

  8. JVM的生命周期、体系结构、内存管理和垃圾回收机制

    一.JVM的生命周期 JVM实例:一个独立运行的java程序,是进程级别 JVM执行引擎:用户运行程序的线程,是JVM实例的一部分 JVM实例的诞生 当启动一个java程序时.一个JVM实例就诞生了, ...

  9. 【深入Java虚拟机】之二:Java垃圾回收机制

    [深入Java虚拟机]之:Java垃圾收集机制 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例.谈到Java堆中的垃圾回收,自然要谈到引用.在JDK ...

随机推荐

  1. 平衡树 - 红黑树(JQuery+Js+Canvas版本的,帮助大家理解)

    红黑树 1.红黑树介绍 年写的一篇论文中获得的.它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目. 2 ...

  2. XML 关键字

    SGML--Standard Generalized Marked Language 标准通用标记语言GML--Generalized Marked Language 通用标记语言XML--Extes ...

  3. oracle执行带输入输入参数的存储过程

    declare a1 ); a2 ); begin PKG_INPATIENT.prc_autojf('Y', a1, a2); end;

  4. actor简介

    今天抽时间,给team做了一次actor介绍,现附上ppt actor 简介及应用

  5. PHPCMS V9数据库配置文件database.php位置

    初次用PHPCMS V9的朋友可能找不到数据库配置文件,其实在官方的wiki中已经介绍了.那就是 caches\configs\database.php 文件. 初次用PHPCMS V9的朋友可能找不 ...

  6. Android Folding View(折叠视图、控件)

    版本号:1.0 日期:2014.4.21 版权:© 2014 kince 转载注明出处 非常早之前看过有人求助以下这个效果是怎样实现的,   也就是側滑菜单的一个折叠效果,事实上关于这个效果的实现,谷 ...

  7. UVALive 2519 Radar Installation 雷达扫描 区间选点问题

    题意:在坐标轴中给出n个岛屿的坐标,以及雷达的扫描距离,要求在y=0线上放尽量少的雷达能够覆盖全部岛屿. 很明显的区间选点问题. 代码: /* * Author: illuz <iilluzen ...

  8. Swift - 使用TableView的静态单元格进行页面布局

    通过使用静态单元格的列表,我们可以很方便的进行页面布局.下面通过一个“添加任务页面”来进行演示. 效果图如下: 实现步骤: 1,在storyboard中拖入一个TableViewController, ...

  9. OpenCV Python教程(3、直方图的计算与显示)

    转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

  10. Android——与查询联系人相关的3张表