最近项目中遇到了个关于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. Servlet的学习(四)

    在本篇的Servlet的学习中,主要来学习由使用MyEclipse来开发Servlet的一些小细节. 细节一:在web.xml中可以对同一个Servlet配置多个对外访问路径,并如果在web.xml中 ...

  2. Spring3.0 入门进阶(1):从配置文件装载Bean

    Spring 已经盛行多年,目前已经处于3.0阶段,关于Spring的概念介绍性的东西网上已经很多,本系列博客主要是把一些知识点通过代码的方式总结起来,以便查阅. 作为入门,本篇主要介绍Bean的加载 ...

  3. listbox多选实现上下移动 js版和服务器版

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="X200906021128.as ...

  4. CodeForces 370C. Mittens

    C. Mittens time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  5. python发送post和get请求

    python发送post和get请求 get请求: 使用get方式时,请求数据直接放在url中. 方法一. import urllib import urllib2 url = "http: ...

  6. 使用RNSwipeViewController类库进行视图切换

    如今很多应用已经不再局限于点击按钮触发事件来进行视图之间切换,为迎合给予用户更好体验,体现iOS系统极佳用户体验,使用手势来进行各个视图之间切换,用户至于一个大拇指在屏幕中央就可浏览到很多信息: 关于 ...

  7. XMPPclient库Smack 4.0.6一个版本的开发

    XMPPclient库Smack 4.0.6版开发之中的一个 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Smack库概述 Smack是一个开源. ...

  8. javascript (十四) dom

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object M ...

  9. 使用Curl进行抓取远程内容时url中文编码问题

    PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只 ...

  10. 查找MobileSafari WebKit revision number的方法

    Mobile Safari是开源的Mac Safari的iOS版本,然而iOS WebKit并不完全开源,只公开了部分的WebCore和JavaScriptCore.有时需要知道iOS Safari的 ...