知识大全 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的垃圾收集 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java中使用newnew
JVM中垃圾收集技术的变更 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着九十年代java语
:新生代串行收集器(默认收集器) 算法复制算法 XX:+UseSerialGC指定使用新生代串行收集器和老年代串行收集器 优点效率高久经考验 缺点串行如果回收对象过多或者堆过大停顿时间会过
Java垃圾收集算法与内存泄露 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 垃圾收集算法的核心
Java有一个很好的地方就是java的垃圾收集机制这个机制集成于jvm的对程序员来说是隐藏且不透明的这种情况下如何得到某个对象消耗的内存呢? 曾经看到过有人用以下方法来计算在生成该obj
GC策略&内存申请、对象衰老 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JVM里的GC(
JVM基础:JVM内存组成及分配 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
SomeofthedefaultvaluesforSunJVMsarelistedbelow
JVM内存溢出的两大类型及解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 你知道如何解决
很难相信Java居然能和C++一样快甚至还能更快一些 据我自己的实践这种说法确实成立然而我也发现许多关于速度的怀疑都来自一些早期的实现方式由于这些方式并非特别有效所以没有一个模型可供参考不能解释