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数。并行收集线程数

jvm之内存分配与回收策略的更多相关文章

  1. JVM的内存分配垃圾回收策略

    之前看过<深入了解Java虚拟机>感觉容易忘,今天写一篇博客加深一下印象. JVM的内存分配和垃圾回收(GC)主要发生在Java堆中.而Java堆根据对象的存活时间可以分为新生代和老年代, ...

  2. JVM的内存分配和回收策略

    对象的Class加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应 ...

  3. JVM:内存分配与回收策略

    Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决了两个问题:给对象分配内存以及回收分配给对象的内存. 对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类 ...

  4. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  5. JVM垃圾回收器、内存分配与回收策略

    新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...

  6. JVM学习十 -(复习)内存分配与回收策略

    内存分配与回收策略 对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定 ...

  7. Java虚拟机内存分配与回收策略

    内存分配与回收策略 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行, 执行的速度一般也会比较快. Full GC ...

  8. jvm内存分配和回收策略

    在上一篇中,已经介绍了内存结构是什么样的. 这篇来介绍一下 内存是怎么分配的,和怎么回收的.(基本取自<深入理解Java虚拟机>一书) java技术体系中所提倡的自动内存管理最终可以归结为 ...

  9. JVM 内存分配和回收策略

    对象的内存分配,主要是在java堆上分配(有可能经过JIT编译后被拆为标量类型并间接地在栈上分配),如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配.少数情况下也是直接分配到老年代,分配规则不 ...

随机推荐

  1. ASP.NET 中的定时执行任务

    在一个网站中,设定一些任务能够在后台定时执行. public static void AddTask(int seconds, Action todo) { HttpRuntime.Cache.Ins ...

  2. Android - Layout时发生'Unfortunately xxx has stopped'

    概述 我在进行LinearLayout和TableLayout的嵌套布局的时候,发生题的错误.如下布局xml代码: <LinearLayout xmlns:android="http: ...

  3. SQL SERVER 2012疑难问题解决方法

    问题一: 问题描述 SQL SERVER 2012 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. (System.Data) 解决办法 管理员身份运行 cmd ->  输入 netsh ...

  4. Cocos2d-x3.2总结---使用物理引擎进行碰撞检测

    [转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...

  5. 多个显示器, window.open的定位

    // Pops a window relative to the current window position function popup(url, winName, xOffset, yOffs ...

  6. PHP文件系统概述

    >> 本文固定链接: http://php.ncong.com/php_course/file/wenjianxitong.html >> 转载请注明: 恩聪php 2014年 ...

  7. php中jsonp的跨域实例

    我们现在www.test.com这个域名下面有这么个html文件testjsonp.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  8. Python hashlib模块 (主要记录md5加密)

    python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...

  9. java 面试

        115个Java面试题和答案——终极列表(上) 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一 ...

  10. Logger之Logger.getLogger(CLass)

    之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了. 在项目中 ...