一、垃圾概念
没有引用执行的任何对象都叫做垃圾。
二、java和C++对垃圾处理的区别
java:只管扔垃圾就行,自动处理
C++:手动处理,但会产生问题
三、如何定位垃圾
引用计数(Reference Count)后面会说RC
根可达算法(Root Searching)
根有哪些
三、常见的垃圾回收算法
四、JVM内存分代模型(用于分代垃圾回收算法)
部分垃圾回收器使用的模型
新生代 + 老年代 + 永久代(1.7)Perm Generation/ 元数据区(1.8) Metaspace
新生代
一个对象产生后进行栈上分配,若分配不下进入eden,eden经过一次垃圾回收进入s0,s0在经过一次垃圾回收后进入s1,此时eden某些对象也跟着进入s1,什么时候年龄够了会进入old区。
- YGC回收之后,大多数的对象会被回收,活着的进入s0
- 再次YGC,活着的对象eden + s0 -> s1
- 再次YGC,eden + s1 -> s0
- 年龄足够 -> 老年代 (15 CMS 6)
- s区装不下 -> 老年代
老年代
GC Tuning (Generation)
- 尽量减少FGC
对象分配过程图
start会new一个新对象,首先在栈上分配,如果能分配就分配到栈上,栈上有个好处直接压栈弹出。若分配不下就会判断打不打(用一个参数来制定),如果特别大,直接进入old区(FGC才会结束),如果不够大,会进去TLAB到eden,进行GC清除。如果清完结束,没清完进S1,S1在进行GC的清除,如果年龄够了进入old区,如果不够进S2。
五、常见的垃圾回收器
- Serial 年轻代 串行回收
- PS 年轻代 并行回收
- ParNew 年轻代,配合CMS的并行回收
- SerialOld
- ParallelOld
- ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,降低STW的时间(200ms)
- CMS问题比较多,所以现在没有一个版本默认是CMS,只能手工指定
单独解释一下CMS:CMS问题比较多,所以现在没有一个版本默认是CMS,只能手工指定,CMS既然是MarkSweep,就一定会有碎片化的问题,碎片到达一定程度,CMS的老年代分配对象分配不下的时候,使用SerialOld 进行老年代回收
CMS常见几个阶段:1.CMS initial mark(初始标记阶段)2.CMS concurrent mask(并发标记)3.CMS remark(重新标记)4.concurrent sweep(并发清理)
CMS四个阶段的解释:
1.初始标记STW开始的标记
2.并发标记和应用程序同时进行
3.重新标记又是一个STW,在并发标记中产生新垃圾在重新标记中标记
4.并发清理会产生新垃圾,叫浮动垃圾
CMS两大问题
1.Memory Fragmentation内存碎片,CMS设计对付几百兆内存,到了上G内存的时候,一旦老年代产生很多碎片,年轻代过来找不到空间,这叫PromotionFailed找不到空间,这时候会用Serial Old进行标记压缩
2.Floating Garbage浮动垃圾,出现Concurrent Mode Failure和PromotionFailed时说明碎片较多,里面内存分配不下会调用Serial Old。
解决方案:降低触发CMS的阈值。
CMS和PO为啥不能一起使用:提出这个问题的原因是为何是Serial,而不能并行执行原因在于,Parallel Scavenge没有使用原本HotSpot其它GC通用的那个GC框架,所以不能跟使用了那个框架的CMS搭配使用。
在计算机科学领域中,人工智能是一种机器表现的行为,这种行为能以与人类智能相似的方式对环境做出反应并尽可能提高自己达成目的的概率。人工智能大体上可以分为 3 类:弱人工智能...
通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。0、将Map转换为List类型在java中Map接口提供了三种集合获取方式:Key set,,value set, and key-value set.。它们都可以通过构造方法或者addAll()方法来转换为List类型。下面代码就说明了如何从Map中构造A...
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://shitouer.cn/2013/02/hadoop-source-code-analyse-mapreduce-inputformat/1. 概述我们在设置MapReduce输入格式的时候,会调用这样一条语句:?1jo
【前言】在项目里用了Bootstrap框架,第一次写前端,发现不知道如何引用样式。首先样式文件css js fonts放在什么地方?按照现在的常用做饭,css放在WebContent目录下,而不能放在WEB-INF目录下其次,如何引用CSS?在Bootstrap样例代码中,核心库用了一个外部的cdn如果我本地有现成的css文件夹,就放在了WebConte
Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看。Oracle bitand( )函数:返回两个数值型数值在按位进行AND 运算后的结果。语法BITAND(nExpression1, nExpression2)参数nExpression1, nExpression2
[url=http://www.kubiji.cn/github_listing-id74.html]Github[/url]优秀[url=http://www.kubiji.cn/juhe_listing-idQianDuanXingNeng.html]web前端[/url]资源收集HTML/CSS[url=https://github.com/h5bp/html5-boiler...
面试的五个经典问题 面试的五个经典问题[ 2006-03-15 18:08 ]面试是应聘一份工作的重要一关。许多人常常担心面试官到底会问什么,下面这五个经典问题可以帮你理一下思路。 1、Please tell us about your work experience. 请告诉我你过去的工作经验. "Work experience"...
LocalDate类的toEpochDay()方法 (LocalDate Class toEpochDay() method)toEpochDay() method is available in java.time package. toEpochDay()方法在java.time包中可用。 toEpochDay() method is used to convert this LocalD...
原文地址:http://dev.gameres.com/Program/Abstract/Thinking/online_g_3.htm 下面我想来谈谈关于服务器上NPC的设计以及NPC智能等一些方面涉及到的问题。首先,我们需要知道什么是NPC,NPC需要做什么。NPC的全称是(Non-Player Character),很显然,他是一个character,但不是玩家,那么从这点上可以知道,N
2015总结 1.真心学到了很多东西。每天朝9晚9+的,程序员最考验的是身体了。2.全栈是个不小而甘愿进入的坑。3.golang真心喜欢。开发守护进程,后端,后台非常开心。4.学会了和女孩子相处。(首先要有钱,或者多才多艺,兼得最好。当然,打代码速度快是不算艺术的,毕竟女程序猿太少了)5.不要过多的集中于业务逻辑,我是一个工程师...
本文来源:养码场最近读到这样一篇文章,从底层硬件角度出发剖析了一下CPU对代码的识别和读取,内容之精彩,读完感觉学到的很多东西瞬间联系起来了,分享给猿们。首先要开始这个话题要先说一下半导...
Exception evaluating SpringEL expression:错误说明:在网上找了很多文章解决的方法,很多都没啥作用不过慢慢找着百度还是被我找到了解决的方法转载自:http://www.bubuko.com/infodetail-2594317.html错误信息:Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "username" (template: "u