• jvm性能优化及内存分区


     jvm性能优化及内存分区 2012-09-17 15:51:37

    分类: Java

    Some of the default values for Sun JVMs are listed below. 
    JDK 1.3.1_06 Initial Size Maximum Size 
    Client JVM 1MB 32MB 
    Server JVM 1MB 64MB 

    JDK 1.4.1_01 Initial Size Maximum Size 
    Client JVM 4MB 64MB 
    Server JVM 4MB 64MB 

    JDK 1.4.2 Initial Size Maximum Size 
    Client JVM 4MB 64MB 
    Server JVM 16MB 64MB 

    JDK 1.5.0 Initial Size Maximum Size 
    Client JVM 8MB 64MB 
    Server JVM 16MB 64MB

    以下是sun公司的性能优化白皮书中提到的几个例子: 
    1.对于吞吐量的调优。机器配置:4G的内存,32个线程并发能力。 
    java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 
          -Xmx3800m -Xms3800m 配置了最大Java Heap来充分利用系统内存。 
          -Xmn2g 创建足够大的青年代(可以并行被回收)充分利用系统内存,防止将短期对象复制到老年代。 
        -Xss128 减少默认最大的线程栈大小,提供更多的处理虚拟内存地址空间被进程使用。 
        -XX:+UseParallelGC 采用并行垃圾收集器对年青代的内存进行收集,提高效率。 
        -XX:ParallelGCThreads=20 减少垃圾收集线程,默认是和服务器可支持的线程最大并发数相同,往往不需要配置到最大值。 
    2.尝试采用对老年代并行收集 
    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC 
    -Xmx3550m -Xms3550m 内存分配被减小,因为ParallelOldGC会增加对于Native Heap的需求,因此需要减小Java Heap来满足需求。 
    -XX:+UseParallelOldGC 采用对于老年代并发收集的策略,可以提高收集效率。 
    3.提高吞吐量,减少应用停顿时间 
    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31 
    -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 选择了并发标记交换收集器,它可以并发执行收集操作,降低应用停止时间,同时它也是并行处理模式,可以有效地利用多处理器的系统的多进程处理。 
    -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=31 表示在青年代中Eden和Survivor比例,设置增加了Survivor的大小,越大的survivor空间可以允许短期对象尽量在年青代消亡。 
    -XX:TargetSurvivorRatio=90 允许90%的空间被占用,超过默认的50%,提高对于survivor的使用率。

    JAVA的JVM的内存可分为3个区(常用的,一共有6个):堆(heap)、栈(stack)和方法区(method)

    堆区:

    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放数据

    栈区:

    1.每个线程包含一个栈区,栈中只保存原始类型数据和对象和对象引用(不是对象),对象都存放在堆区中

    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

    方法区:

    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

  • 相关阅读:
    浅析深度优先和广度优先遍历实现过程、区别及使用场景
    浅析为什么要用setTimeout模拟setInterval
    app弹出软键盘获取键盘高度不准确的原因及导致底部定位的元素无法贴近键盘的问题
    App平台iOS设备上因内存不足导致白屏、闪退的原因及其解决方案
    浅谈移动端开发技术
    浅析Console命令调试常用方法
    js正则表达式中的正向肯定预查和正向否定预查, 反向肯定和反向否定(这个翻译不准确)
    javascript的版本查看及js的历史
    【转】JS-正则表达式的反向引用
    【转】Linux虚拟网络设备之tun/tap
  • 原文地址:https://www.cnblogs.com/isoftware/p/3733926.html
Copyright © 2020-2023  润新知