JVM
文章平均质量分 88
linの架构梦
这个作者很懒,什么都没留下…
展开
-
CMS和三色标记法
概念 ParNew 补充一下ParNew垃圾收集器,能够和CMS配合使用,在回收年轻代时采用标记复制算法,回收老年代采用标记清除算法。 STW STW,全称 stop the world 世界静止。也就是在GC阶段,需要暂停所有的用户线程,以便合理的完成垃圾回收。 什么叫做合理的完成?来看看不暂停用户线程带来的问题: 其一:假如我这边刚刚标记A对象不是垃圾对象,你用户线程这边又把A对象的引用置为空,那岂不是这次就没有回收到,只能等到下次GC才能回收。 其二:已经标记A对象是垃圾,结果用户线程又重原创 2021-03-20 21:05:36 · 458 阅读 · 0 评论 -
关于前篇内存分配的补充
对象动态年龄判断 当前放对象的Survivor区域里(其中一块区域,放对象的那块s区),一批对象的总大小大于这块Survivor区域内存大小的 50%(-XX:TargetSurvivorRatio可以指定),那么此时大于等于这批对象年龄最大值的对象,就可以直接进入老年代了, 例如Survivor区域里现在有一批对象,年龄1+年龄2+年龄n的多个年龄对象总和超过了Survivor区域的50%,此时就会 把年龄n(含)以上的对象都放入老年代。这个规则其实是希望那些可能是长期存活的对象,尽早进入老年代。对象动态原创 2021-03-14 15:58:16 · 66 阅读 · 0 评论 -
JVM 垃圾回收前置知识
什么是垃圾? 严格来说对于JVM而言什么算垃圾?了解过类加载之后,应该知道,JVM的运行时数据区中分配一块堆内存,里面存放了我们的实例对象。 那么什么样的对象才算垃圾呢? 我们通常创建一个对象时一般是这样色儿的: User user = new User(); 可以这样简单理解,new去帮我们在堆当中创建了User对象实例,并且把这个实例的引用返回赋值给了user变量。 那么我们可以这样去理解一个“合格”的对象,首先它得存在(堆中有实例),其次它被引用着(这里就包含上面那样被一个变量引用,还包含着如果这个原创 2021-03-14 15:45:37 · 125 阅读 · 0 评论 -
JVM内存结构
整体结构 内容解释 JVM包含有:堆,方法区,程序计数器,线程栈,本地方法栈 前两者是线程共享的,后三者是线程私有 堆 被所有线程共享的一块内存区域,在虚拟机启动的时候创建,用于存放对象实例。 对可以按照可扩展来实现(通过-Xmx 和-Xms 来控制) 当队中没有内存可分配给实例,也无法再扩展时,则抛出OutOfMemoryError异常。 老年代:2/3的堆空间 年轻代:1/3的堆空间 eden区:8/10 的年轻代 survivor0: 1/10 的年轻代 survivor1:1/10的年轻代原创 2021-03-12 13:26:11 · 118 阅读 · 4 评论