知识大全 JVM内存模型及垃圾收集策略解析(1)

Posted

篇首语:一箫一剑平生意,负尽狂名十五年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JVM内存模型及垃圾收集策略解析(1)相关的知识,希望对你有一定的参考价值。

JVM内存模型及垃圾收集策略解析(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 JVM内存模型

   Java栈

  Java栈是与每一个线程关联的 JVM在创建每一个线程的时候 会分配一定的栈空间给线程 它主要用来存储线程执行过程中的局部变量 方法的返回值 以及方法调用上下文 栈空间随着线程的终止而释放 StackOverflowError 如果在线程执行的过程中 栈空间不够用 那么JVM就会抛出此异常 这种情况一般是死递归造成的

   堆

  Java中堆是由所有的线程共享的一块内存区域 堆用来保存各种JAVA对象 比如数组 线程对象等

   Generation

  JVM堆一般又可以分为以下三部分

  

  ◆ Perm

  Perm代主要保存class method filed对象 这部门的空间一般不会溢出 除非一次性加载了很多的类 不过在涉及到热部署的应用服务器的时候 有时候会遇到java lang OutOfMemoryError : PermGen space 的错误 造成这个错误的很大原因就有可能是每次都重新部署 但是重新部署后 类的class没有被卸载掉 这样就造成了大量的class对象保存在了perm中 这种情况下 一般重新启动应用服务器可以解决问题

  ◆ Tenured

  Tenured区主要保存生命周期长的对象 一般是一些老的对象 当一些对象在Young复制转移一定的次数以后 对象就会被转移到Tenured区 一般如果系统中用了application级别的缓存 缓存中的对象往往会被转移到这一区间

  ◆ Young

  Young区被划分为三部分 Eden区和两个大小严格相同的Survivor区 其中Survivor区间中 某一时刻只有其中一个是被使用的 另外一个留做垃圾收集时复制对象用 在Young区间变满的时候 minor GC就会将存活的对象移到空闲的Survivor区间中 根据JVM的策略 在经过几次垃圾收集后 任然存活于Survivor的对象将被移动到Tenured区间

   Sizing the Generations

  JVM提供了相应的参数来对内存大小进行配置 正如上面描述 JVM中堆被分为了 个大的区间 同时JVM也提供了一些选项对Young Tenured的大小进行控制

  

  ◆ Total Heap

   Xms 指定了JVM初始启动以后初始化内存

   Xmx 指定JVM堆得最大内存 在JVM启动以后 会分配 Xmx参数指定大小的内存给JVM 但是不一定全部使用 JVM会根据 Xms参数来调节真正用于JVM的内存

   Xmx Xms之差就是三个Virtual空间的大小

  ◆ Young Generation

   XX:NewRatio= 意味着tenured 和 young的比值 这样eden+ *survivor= /

  堆内存

   XX:SurvivorRatio= 意味着eden和一个survivor的比值是 这样一个Survivor就占Young区的 /

   Xmn 参数设置了年轻代的大小

  ◆ Perm Generation

   XX:PermSize= M XX:MaxPermSize= M

  Thread Stack

   XX:Xss= K

   堆栈分离的好处

cha138/Article/program/Java/hx/201311/27140

相关参考

知识大全 有关于JVM的垃圾收集

有关于JVM的垃圾收集  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java中使用newnew

知识大全 JVM中垃圾收集技术的变更

JVM中垃圾收集技术的变更  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着九十年代java语

知识大全 jvm性能调优/垃圾回收器

  :新生代串行收集器(默认收集器)  算法复制算法  XX:+UseSerialGC指定使用新生代串行收集器和老年代串行收集器  优点效率高久经考验  缺点串行如果回收对象过多或者堆过大停顿时间会过

知识大全 Java垃圾收集算法与内存泄露

Java垃圾收集算法与内存泄露  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集算法的核心

知识大全 如何计算java对象占用的内存

  Java有一个很好的地方就是java的垃圾收集机制这个机制集成于jvm的对程序员来说是隐藏且不透明的这种情况下如何得到某个对象消耗的内存呢?      曾经看到过有人用以下方法来计算在生成该obj

知识大全 GC策略&内存申请、对象衰老

GC策略&内存申请、对象衰老  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    JVM里的GC(

知识大全 JVM内存组成及分配

JVM基础:JVM内存组成及分配  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 jvm性能优化及内存分区

   SomeofthedefaultvaluesforSunJVMsarelistedbelow      

知识大全 JVM内存溢出的两大类型及解决方案

JVM内存溢出的两大类型及解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你知道如何解决

知识大全 关于垃圾收集的一些话

  很难相信Java居然能和C++一样快甚至还能更快一些  据我自己的实践这种说法确实成立然而我也发现许多关于速度的怀疑都来自一些早期的实现方式由于这些方式并非特别有效所以没有一个模型可供参考不能解释