• jvm之内存分配与回收策略


    1、java堆中各代分布

    (1)Young:主要是用来存放新生的对象。

    (2)Old:主要存放应用程序中生命周期长的内存对象。

    (3)Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和和存放Instance的Heap区  域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space      错误。

    2. JVM 使用的GC算法是什么?

      在现代虚拟机(通常就是 HotSpot(TM)),使用的分代算法来处理内存,并没有什么新意,只是针对对象的生命周期范围来划分区域,不同的区域使用不同的算法。一般分为新生代和老生代,新生代由于生命不长,GC的时候大部分对象已经死亡,所以有足够的空间作为担保,可用使用标记-复制算法,对于老生代老生代使用标记-清除或标记-整理算法。即将内存分为几个区域,将不同生命周期的对象放在不同区域里;在GC收集的时候,频繁收集生命周期短的区域(Young area);比较少的收集生命周期比较长的区域(Old area);基本不收集的永久区(Perm area)。

    3. GC 和 Full GC 有什么区别?

    GC(或Minor GC):收集 生命周期短的区域(Young area)。

    Full GC (或Major GC):收集生命周期短的区域(Young area)和生命周期比较长的区域(Old area)对整个堆进行垃圾收集。

    他们的收集算法不同,所以使用的时间也不同。 GC 效率也会比较高,我们要尽量减少 Full GC 的次数。 当显示调用System.gc() 时,gc does a full collection(both young generation and tenured generation).

    4. Minor GC后,Eden是空的吗?

    是的,Minor GC会把Eden中的所有活的对象都移到Survivor区域中,如果Survivor区中放不下,那么剩下的活的对象就被移到Old generation 中。

    5、堆设置  

    -Xms :初始堆大小  
    -Xmx :最大堆大小  
    -XX:NewSize=n :设置年轻代大小  
    -XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4  
    -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 
    -XX:MaxPermSize=n :设置持久代大小  
    收集器设置  
    -XX:+UseSerialGC :设置串行收集器  
    -XX:+UseParallelGC :设置并行收集器  
    -XX:+UseParalledlOldGC :设置并行年老代收集器  
    -XX:+UseConcMarkSweepGC :设置并发收集器  
    垃圾回收统计信息  
    -XX:+PrintHeapAtGC GC的heap详情 
    -XX:+PrintGCDetails  GC详情 
    -XX:+PrintGCTimeStamps  打印GC时间信息 
    -XX:+PrintTenuringDistribution    打印年龄信息等
    -XX:+HandlePromotionFailure   老年代分配担保(true  or false)
    并行收集器设置  
    -XX:ParallelGCThreads=n :设置并行收集器收集时使用的CPU数。并行收集线程数。  
    -XX:MaxGCPauseMillis=n :设置并行收集最大暂停时间  
    -XX:GCTimeRatio=n :设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)  
    并发收集器设置  
    -XX:+CMSIncrementalMode :设置为增量模式。适用于单CPU情况。  
    -XX:ParallelGCThreads=n :设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数
  • 相关阅读:
    基于Centos7.2搭建Cobbler自动化批量部署操作系统服务
    Centos 7 Linux系统修改网卡名称为ethx
    解决端口被占用而导致软件运行失败,程序无法启动,无法安装开发工具等问题
    applicationContext.xml文件放置位置不同而导致的jUnit测试的时候路径的不同
    myeclipse中的web项目导入到eclipse中注意事项,项目部署到tomcat后无法访问jsp文件
    SSH项目整合教学Eclipse搭建SSH(Struts2+Spring3+Hibernate3)
    ApplicationContext.xml文件详解
    SSH项目练习的时候报错:[applicationContext.xml]: Invocation of init method failed;
    [转载]快速搭建Spring MVC 4开发环境
    struts配置测试中遇到报错信息,记录下
  • 原文地址:https://www.cnblogs.com/chengJAVA/p/5803769.html
Copyright © 2020-2023  润新知