??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜在线播放,亚洲伊人久久精品影院,亚洲精品国产精品乱码在线观看http://www.tkk7.com/weiwei/articles/410765.htmlliwei5891liwei5891Sat, 08 Mar 2014 04:57:00 GMThttp://www.tkk7.com/weiwei/articles/410765.htmlhttp://www.tkk7.com/weiwei/comments/410765.htmlhttp://www.tkk7.com/weiwei/articles/410765.html#Feedback0http://www.tkk7.com/weiwei/comments/commentRss/410765.htmlhttp://www.tkk7.com/weiwei/services/trackbacks/410765.html1.计算Z息的存储与处?/div>
计算Z息(包括字母、各U符受图形符P分ؓQ?/div>
|--数据信息
|--数?/div>
|--非数?/div>
|--控制信息
计算Z息以二进制编码方式存入计机q得以处理?/div>
q种二进制代码就叫字W编码?/div>
2.西文字符?/div>
使用最q泛的西文字W集及编码是QASCII字符??ASCII?/div>
(American Standard Code for Information Interchange)国标准信息交换?/div>
使用7个或8个二q制q行~码的方案,最多可以给256个字W编码?/div>
基本的ASCII字符集共?28个字W,其中96个是可打印字W?/div>
A?5Q??8
大小写之间差32
3.MBCS
为扩充ASCII~码Q不同国家地区制定了不同的标准。它些?个字节代表一个字W的各种汉字延׾~码方式Q称为ANSI~码 (American Nation Standards Institute-国国家标准学会Q又UCؓQMuilti-Bytes Charecter Set 多字节字W集
体中文下,ANSI表示GB2312~码
׃不同ANSI~码互不兼容Q因此将属于两种语言的文字存储在同一DANSI~码的文本中。另外同一个编码值在不同的编码体pM表不同的字,q样Ҏ造成混ؕ。这导致了UNICODE码的诞生?/div>
所有的~码都有一个{换器可以转到unicode,而unicode也可以{换到其它所有的~码
3.GB2312
中国国家标准d发布了一pd汉字字符集国家标准编码,其中最有媄响的?1980q发布的GB 2312-1980,因其使用非常普遍Q也被称为国标码?/div>
GB2312?763个常用汉字和682个全角的非汉字字W组成。汉字根据用频率分两,一U?755个,二3008个。采用二l矩늼码法Ҏ有字条进行编码?4?4列的斚wQ每一行称Z个区Q每一列称Z个位?/div>
4.UNICODE~码
它是一个大而全的编码,包含了世界上所有的W号Q无论是英文Q日文,q是中文。现在的规模可以容纳100多万个符P每个W号的编码都不一栗?/div>
虽然l一了编码方式,但它的效率不高。对存储和传输来说都很耗资?/div>
5.UTF-8
为提?unicode的编码效率,出现了UTF-8~码?/div>
它可Ҏ不同的符可动选择~码的长短?/div>


liwei5891 2014-03-08 12:57 发表评论
]]>球规则-视频http://www.tkk7.com/weiwei/articles/407865.htmlliwei5891liwei5891Sat, 21 Dec 2013 15:41:00 GMThttp://www.tkk7.com/weiwei/articles/407865.htmlhttp://www.tkk7.com/weiwei/comments/407865.htmlhttp://www.tkk7.com/weiwei/articles/407865.html#Feedback0http://www.tkk7.com/weiwei/comments/commentRss/407865.htmlhttp://www.tkk7.com/weiwei/services/trackbacks/407865.html球规则W一?比赛场地
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=1322621_1279208024_OErhTyU4XjbK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYd8F5ivXFokbpWFMR5o9c/wn/s.swf
球规则W二??/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939506_1279208024_akzmTCo6BmfK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzWBtkEqDhARZg2dvcj1xs/s.swf
球规则W三?队员人数
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939528_1279208024_a0u1GnZuDGHK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzUCNkEqDhARZg2dvcj1RU/s.swf
球规则W四?队员装备
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939735_1279208024_OEjjSyA/XmDK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7VBdkEqDhARZg2dvch1Bg/s.swf
球规则W五?裁判?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939594_1279208024_aEmyGHZuB2TK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzfBNkEqDhARZg2dvcj3hk/s.swf
球规则W六?助理裁判?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939656_1279208024_aBm8SHNrDWXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S/TBtkEqDhARZg2dvcg0hs/s.swf
球规则W七?比赛旉
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939865_1279208024_bkO8GiE8XmHK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SHQBdkEqDhARZg2dvcu0Rg/s.swf
球规则W八?比赛开始及重新开?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939728_1279208024_aB3gRyQ6Xm7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7UCNkEqDhARZg2dvch1RU/s.swf
球规则W九?比赛q行及死?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939750_1279208024_bhm0SyNpXWfK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7TANkEqDhARZg2dvch0h0/s.swf
球规则W十?记胜Ҏ
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939969_1279208024_Zx7kSCo+XW/K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SDQCdkEqDhARZg2dvcv0RQ/s.swf
球规则W十一?位
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10940141_1279208024_O0mxHXFqCm7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQD4CjSAdkEqDhARZg2cf4n0xw/s.swf
球规则W十二章 犯规与不正当行ؓ
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10940156_1279208024_bh/nTSNuDG7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQD4CjTBtkEqDhARZg2cf4n0hs/s.swf
球规则W十三章 L?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544688_1279208024_O0m0TCo4XmPK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5C/eCNkEqDhARp06cfog3xU/s.swf
球规则W十四章 |球点球
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544796_1279208024_bUvmTCMxBmXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5C7fBtkEqDhARp06cfoh3hs/s.swf
球规则W十五章 L外球
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544834_1279208024_a028GiI4CjXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5CHVBNkEqDhARp06cfou1Bk/s.swf
球规则W十六章 球门?/div>
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25536623_1279208024_P021SSQxC2bK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gE5i/UA9kEqDhARp06dvgg1R4/s.swf
球规则W十七章 角球
http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544954_1279208024_bErmTis6CzPK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5CDTBNkEqDhARp06cfov0hk/s.swf


liwei5891 2013-12-21 23:41 发表评论
]]>量用户U分排名法探讨(?http://www.tkk7.com/weiwei/articles/406768.htmlliwei5891liwei5891Mon, 25 Nov 2013 00:37:00 GMThttp://www.tkk7.com/weiwei/articles/406768.htmlhttp://www.tkk7.com/weiwei/comments/406768.htmlhttp://www.tkk7.com/weiwei/articles/406768.html#Feedback1http://www.tkk7.com/weiwei/comments/commentRss/406768.htmlhttp://www.tkk7.com/weiwei/services/trackbacks/406768.html转至Q?/span>http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html

问题

某v量用L站,用户拥有U分Q积分可能会在用过E中随时更新。现在要|站设计一U算法,在每ơ用L录时昄其当前积分排名。用h大规模ؓ2亿;U分为非负整敎ͼ且小?00万?/p>

PS: 据说q是q雷的一道面试题Q不q问题本w具有很强的真实性,所以本文打按照真实场景来考虑Q而不局限于面试题的理想环境?/p>

存储l构

首先Q我们用一张用L分表user_score来保存用LU分信息?/p>

表结构:

user<em />score</em>schema

CZ数据Q?/p>

user<em />score</em>sample

下面的算法会Zq个基本的表l构来进行?/p>

法1Q简单SQL查询

首先Q我们很Ҏ惛_用一条简单的SQL语句查询出积分大于该用户U分的用h量:

select 1 + count(t2.uid) as rank from user_score t1, user_score t2 where t1.uid = @uid and t2.score > t1.score 

对于4Lh们可以得C面的l果Q?/p>

sql_1

法特点

优点Q简单,利用了SQL的功能,不需要复杂的查询逻辑Q也不引入额外的存储l构Q对规模或性能要求不高的应用不׃ؓ一U良好的解决Ҏ?/p>

~点Q需要对user_score表进行全表扫描,q需要考虑到查询的同时若有U分更新会对表造成锁定Q在量数据规模和高q发的应用中Q性能是无法接受的?/p>

法2Q均匀分区设计

在许多应用中~存是解x能问题的重要途径Q我们自然会惌不能把用h名用Memcached~存下来呢?不过再一惛_现缓存似乎帮不上什么忙Q因为用h名是一个全局性的l计性指标,而ƈ非用LU有属性,其他用户的积分变化可能会马上影响到本用户的排名。然而,真实的应用中U分的变化其实也是有一定规律的Q通常一个用LU分不会H然暴增暴减Q一般用hL要在低分区؜q很长一D|间才会慢慢升入高分区Q也是说用L分的分布M说来是有区段的,我们q一步注意到高分区用L分的l微变化其实对低分段用户的排名媄响不大。于是,我们可以惛_按积分区D进行统计的ҎQ引入一张分区积分表score_rangeQ?/p>

表结构:

score<em />range</em>schema

数据CZQ?/p>

score<em />range</em>sample

表示[from_score, to_score)区间有count个用戗若我们按每1000分划分一个区间则有[0, 1000), [1000, 2000), …, [999000, 1000000)q?000个区_以后对用L分的更新要相应地更新score_range表的区间倹{在分区U分表的辅助下查询积分ؓs的用L排名Q可以首先确定其所属区_把高于s的积分区间的count值篏加,然后再查询出该用户在本区间内的排名,二者相加即可获得用L排名?/p>

乍一看,q个Ҏ貌似通过区间聚合减少了查询计量Q实则不然。最大的问题在于如何查询用户在本区间内的排名呢?如果是在法1中的SQL中加上积分条Ӟ

select 1 + count(t2.uid) as rank from user_score t1, user_score t2 where t1.uid = @uid and t2.score > t1.score and t2.score < @to_score 

在理x况下Q由于把t2.score的范围限制在?000以内Q如果对score字段建立索引Q我们期望本条SQL语句通过索引大大减少扫描的user_score表的行数。不q真实情况ƈ非如此,t2.score的范围在1000以内q不意味着该区间内的用h也是1000Q因里有U分相同的情况存在!二八定律告诉我们Q前20%的低分区往往集中?0%的用Pq就是说对于大量低分区用戯行区间内排名查询的性能q不及对数的高分区用户Q所以在一般情况下q种分区Ҏ不会带来实质性的性能提升?/p>

法特点

优点Q注意到了积分区间的存在Qƈ通过预先聚合消除查询的全表扫描?/p>

~点Q积分非均匀分布的特点得性能提升q不理想?/p>

法3Q树形分?/h3>

均匀分区查询法的失败是׃U分分布的非均匀性,那么我们自然׃惻I能不能按二八定律Q把score_range表设计ؓ非均匀区间呢?比如Q把低分区划密集一点,10分一个区_然后逐渐变成100分,1000分,10000?… 当然Q这不失ZU方法,不过q种分法有一定的随意性,不容易把握好Q而且整个pȝ的积分分布会随着使用而逐渐发生变化Q最初的较好的分区方法可能会变得不适应未来的情况了。我们希望找CU分区方法,既可以适应U分非均匀性,又可以适应pȝU分分布的变化,q就是树形分区?/p>

我们可以把[0, 1,000,000)作ؓ一U区_再把一U区间分Z?U区间[0, 500,000), [500,000, 1,000,000)Q然后把二区间二分??U区间[0, 250,000), [250,000, 500,000), [500,000, 750,000), [750,000, 1,000,000)Q依此类推,最l我们会得到1,000,000?1U区间[0,1), [1,2) … [999,999, 1,000,000)。这实际上是把区间组l成了一U^衡二叉树l构Q根l点代表一U区_每个非叶子结Ҏ两个子结点,左子l点代表低分区间Q右子结点代表高分区间。树形分区结构需要在更新时保持一U不变量(Invariant)Q非叶子l点的count值L{于其左叛_l点的countg和?/p>

range_tree

以后Q每ơ用L分有变化所需要更新的区间数量和积分变化量有关p,U分变化小更新的区间层ơ越低。M上,每次所需要更新的区间数量是用L分变量的log(n)U别的,也就是说如果用户U分一ơ变化在百万U,更新区间的数量在二十q个U别。在q种树Ş分区U分表的辅助下查询积分ؓs的用h名,实际上是一个在区间树上׃至下、由_到l一步步明确s所在位|的q程。比如,对于U分499,000Q我们用一个初gؓ0的排名变量来做篏加;首先Q它属于1U区间的左子树[0, 500,000)Q那么该用户排名应该在右子树[500,000, 1,000,000)的用hcount之后Q我们把该count值篏加到该用h名变量,q入下一U区_其次Q它属于3U区间的[250,000, 500,000)Q这?U区间的叛_树,所以不用篏加count到排名变量,直接q入下一U区_再次Q它属于4U区间的…Q直到最后我们把用户U分_定位?1U区间[499,000, 499,001)Q整个篏加过E完成,得出排名Q?/p>

虽然Q本法的更新和查询都涉及到若干个操作,但如果我们ؓ区间的from_score和to_score建立索引Q这些操作都是基于键的查询和更新Q不会生表扫描Q因此效率更高。另外,本算法ƈ不依赖于关系数据模型和SQLq算Q可以轻易地攚wؓNoSQL{其他存储方式,而基于键的操作也很容易引入缓存机制进一步优化性能。进一步,我们可以估算一下树形区间的数目大约?,000,000Q考虑每个l点的大,整个l构只占用几十MI间。所以,我们完全可以在内存徏立区间树l构Qƈ通过user_score表在O(n)的时间内初始化区间树Q然后排名的查询和更新操作都可以在内存进行。一般来Ԍ同样的算法,从数据库到内存算法的性能提升常常可以辑ֈ10^5以上Q因此,本算法可以达到非帔R的性能?/p>

法特点

优点Q结构稳定,不受U分分布影响Q每ơ查询或更新的复杂度为积分最大值的O(log(n))U别Q且与用戯模无养I可以应对量规模Q不依赖于SQLQ容易改造ؓNoSQL或内存数据结构?/p>

~点Q算法相Ҏ复杂?/p>

法4Q积分排名数l?/h3>

法3虽然性能较高Q达CU分变化的O(log(n))的复杂度Q但是实C比较复杂。另外,O(log(n))的复杂度只在n特别大的时候才昑և它的优势Q而实际应用中U分的变化情况往往不会太大Q这时和O(n)的算法相比往往没有明显的优势,甚至可能更慢?/p>

考虑到这一情况Q仔l观察一下积分变化对排名的具体媄响,可以发现某用LU分从s变ؓs+nQ积分小于s或者大于等于s+n的其他用h名实际上q不会受到媄响,只有U分在[s,s+n)区间内的用户排名会下?位。我们可以用于一个大ؓ1,000,000的数l表C积分和排名的对应关p,其中rank[s]表示U分s所对应的排名。初始化Ӟrank数组可以由user_score表在O(n)的复杂度内计而来。用h名的查询和更新基于这个数l来q行。查询积分s所对应的排名直接返回rank[s]卛_Q复杂度为O(1)Q当用户U分从s变ؓs+nQ只需要把rank[s]到rank[s+n-1]qn个元素的值增?卛_Q复杂度为O(n)?/p>

法特点

优点Q积分排名数l比区间树更单,易于实现Q排名查询复杂度为O(1)Q排名更新复杂度O(n)Q在U分变化不大的情况下非常高效?/p>

~点Q当n比较大时Q需要更新大量元素,效率不如法3?/p>

ȝ

上面介绍了用L分排名的几种法Q算?单易于理解和实现Q适用于小规模和低q发应用Q算?引入了更复杂的树形分区结构,但是O(log(n))的复杂度性能优越Q可以应用于量规模和高q发Q算?采用单的排名数组Q易于实玎ͼ在积分变化不大的情况下性能不亚于算?。本问题是一个开放性的问题Q相信一定还有其他优U的算法和解决ҎQ欢q探讨!



liwei5891 2013-11-25 08:37 发表评论
]]>
PowerDesigner CDM datatype 在图中显CZؓ?/title><link>http://www.tkk7.com/weiwei/articles/405035.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Wed, 16 Oct 2013 01:03:00 GMT</pubDate><guid>http://www.tkk7.com/weiwei/articles/405035.html</guid><wfw:comment>http://www.tkk7.com/weiwei/comments/405035.html</wfw:comment><comments>http://www.tkk7.com/weiwei/articles/405035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/weiwei/comments/commentRss/405035.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/weiwei/services/trackbacks/405035.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">Tools-></span>Model Settings -> Domain/Attribute ->Use data type full name<img src ="http://www.tkk7.com/weiwei/aggbug/405035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/weiwei/" target="_blank">liwei5891</a> 2013-10-16 09:03 <a href="http://www.tkk7.com/weiwei/articles/405035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA垃圾回收http://www.tkk7.com/weiwei/articles/404814.htmlliwei5891liwei5891Wed, 09 Oct 2013 13:35:00 GMThttp://www.tkk7.com/weiwei/articles/404814.htmlhttp://www.tkk7.com/weiwei/comments/404814.htmlhttp://www.tkk7.com/weiwei/articles/404814.html#Feedback0http://www.tkk7.com/weiwei/comments/commentRss/404814.htmlhttp://www.tkk7.com/weiwei/services/trackbacks/404814.html哪些内存需要回Ӟ
什么时候回Ӟ
如何回收Q?/div>
一Q哪些内存需要回Ӟ
JAVA内存中不需要考虑内存回收问题的区域:
E序计数器、虚拟机栈,本地Ҏ?/div>
Q随U程生灭Q栈帧分配多内存在cȝ构确定是已知,因此它们的内存分配与回收具备定性。方法结束或U程l束Ӟ内存自然p着回收了)
需要考虑内存回收问题的区域:
JAVA堆和Ҏ?/div>
(创徏哪些对象Q创建多对象,需要在q行期间才知道。不再用创徏对象的类定义要从Ҏ区回?
二:堆中对象的回?/div>
d的对象才会被回收
如何判断对象已死
a.引用计数法Q?/div>
l对象添加一个引用计数器Q每当有一个地方引用它Ӟ计数器值就?。引用失效时Q计数器值就?.M时候计数器?的对象就是不可能再被使用的?/div>
优点Q引用计数算法实现简单,判定效率也高?使用在COM,FlashPlayer,Python{语a?
~点Q它很难解决对象之间怺循环引用的问题。(因此JAVA中没有选用它来理内存Q?/div>
b.Ҏ索算?/div>
对于M"GC Roots"都没有\径到辑֯象时Q该对象是不可用的?/div>
L的程序语a都用的是Ҏ索算法,包括JAVA语言?/div>
哪些对象才是"GC Roots"
  • 虚拟机栈(栈中的本地变量?中引用的对象
  • ҎZ的类静态属性引用的对象
  • ҎZ的常量引用的对象
  • 本地Ҏ栈中JNI的引用的对象
JAVA中的引用分ؓQ强引用QStrong ReferenceQ、Y引用QSoft ReferenceQ、弱引用QWeak ReferenceQ、虚引用QPhantom ReferenceQ四U,强度依次减弱
  • 强引用:代码中存在,cM "Object obj = new Object()"q类。只要强引用存在QGC永q不会回收掉被引用的对象?/li>
  • 软引用:描述一些还有用Q但非必需的对象。在pȝ要发生内存溢出异常之前Q将把这些对象列q回范围之中q进行第二次回收。如果这ơ回收还没有_的内存,才会抛出内存溢出异常。通过 SoftReferencecL实现软引用?/li>
  • 弱引用:也用于描q非必需对象Q但它的强度要比软引用更׃些,被弱引用兌的对象只能生成到下一ơGC发生之前。当GC工作Ӟ无论当前内存是否_Q都会回收弱引用兌的对象。通过 WeakReferencecL实现弱引?/li>
  • 虚引用:也称为幽灵引用或qd引用。设|虚引用兌的唯一目录是希望q个对象被回收时收到一个系l通知。通过PhantomReference来实现虚引用
I竟什么样的对象才会死掉呢Q?/div>
要真正宣告一个对象死亡,臛_要经历两ơ标记过E?/strong>Q如果对象在q行Ҏ索后发现没有?GC Roots 相连接的引用链,那它会被第一ơ标记ƈ攑ֈ“卛_被回收的集合”中?/div>
与此同时q行一ơ筛选,{选的条g是此对象是否有必要执?finalize() Ҏ?当对象没有覆?finalize()ҎQ或?finalize() Ҏ已经被虚拟机调用q,虚拟机将q两U情况都视ؓ "没有必要执行"?如果q个对象被判定ؓ有必要执?finalize()ҎQ那么这个对象将会被攄C个名?F-Queue 的队列之中,在E后׃条由虚拟动徏立的Q低优先U的 Finalizer U程L行(触发finalize()Ҏ而不{待Q。finalize()Ҏ是对象逃脱M命运的最后一ơ机会。对象要在finalize()Ҏ中拯救自己,只要重新与引用链上Q何一个对象徏立关联即可,q样的话W二ơ标记时它被U除?#8220;卛_回收的集?#8221;。如果对象这个时候还没有逃脱Q那q的离Mq了?/div>
三:Ҏ区的回收
主要回收两部份内容:废弃帔R、无用的c?/div>
帔R回收与堆中对象回收类伹{?/div>
无用的类的判断需同时满3条:
  • 该类所有的实例都已l被回收Q也是说堆中不存在该类的Q何实?/li>
  • 加蝲该类?ClassLoader 已经被回?/li>
  • 该类对应?java.lang.Class 对象没有在Q何地方被引用Q无法在M地方通过反射讉K该类的方?/li>
虚拟机对满上述3个条件的无用c进行回收。(只是可以Q不会是必然回收Q是否对c进行回ӞHotSpot虚拟Z -Xnoclassgc参数q行控制。还可以使用 -verbose:class ?XX:+TraceClassLoading ?-XX:+TraceClassUnLoading查看cȝ加蝲和卸载信息?/div>
四:垃圾攉法
4.1 标记-清除法
标记出所有需要回收的对象Q标记完成后l一回收掉所有被标记的对象。(如何标记在堆对象回收部分有介l)
它是最基础的收集算法,后箋攉法都是Zq种思\改进而得到?/div>
~点Q效率不高,产生大量不连l的内存片?/div>
Q空间碎片太多,分配较大对象时就无法扑ֈ_q箋内存I间Q而不得不提前触发另一ơ垃圾收集动作)
4.2 复制法
Qؓ解决效率问题Q?/div>
内存按定w划分为大相{的两块Q每ơ只使用其中的一块。当q一块内存用完了Q就还存活着的对象复制到另一块上面,然后再把已用过的内存空间一ơ清理掉?/div>
优点Q内存分配时不用考虑片的问题,实现单,q行高效
~点Q内存羃ؓ原来的一半?/div>
当对象存zȝ较高Ӟ需要较多的复制操作Q效率将会变低。若不想费50%的空_需要额外的I间q行分配担保
现在的商业虚拟机都采用这U收集算法来回收新生?IBM研究表明Q新生代对象98%是朝夕死?。不q,q不是按1Q?的比例来划分内存I间。而是内存分Z块较大的 Eden I间 和两块较的SurvivorI间。每ơ只使用 Eden 和其中的一块Survivor。当回收ӞEden和Survivor中还存活着的对象一ơ性拷贝到另外一块SurvivorI间上,最后清理掉刚才的Eden和Survivor。默认Eden和Survivor比例?8:1。(98%是一般场景,另外一些场景下Q当SurvivorI间不够Ӟ需依赖其它内存【老年代】进行分配担保)
4.3 标记-整理法
复制法的缺点,军_老年代不能用复制算?/div>
Ҏ老年代特点,提出?#8220;标记-整理法”?/div>
标记q程仍然?#8220;标记-清除”法一P但后l步骤不是直接对可回收对象进行清理,而是让所有存zȝ对象都向一端移动,然后直接清理掉端边界以外的内存?/div>
4.4 分代攉法
当前虚拟机的垃圾攉都采?#8220;分代攉”法?/div>
Ҏ对象的存zd期将内存划分为几块。一般将堆分为新生代和老年代,q样Ҏ各个q代的特炚w用最适当的收集算法?/div>
新生代采用复制算?/div>
老年代采?#8220;标记-清理”?#8220;标记-整理”法
五:垃圾攉?/div>
法是内存回收的Ҏ论,垃圾攉器是内存回收的具体实现?/div>
Serial攉?/div>
~点Q单U程攉器,垃圾攉时必L停其它所有的工作U程QStop the worldQ?/div>
优点Q简单而高效,对于Client模式下的虚拟机来说是一个很好的选择。(也是Client模式下的默认新生代收集器Q?/div>
ParNew 攉?/div>
其实是 Serial 攉器的多线E版?/div>
是Server模式下的虚拟机的首选新生代攉器。(一个重要原因是Q目前除了Serial攉器外Q只有它能与CMS攉器配合工作)
Paraller Scavenge 攉?/div>
q行的多U程攉?/div>
它的x点与其它攉器的不同Q它x的是吞吐?/div>
吞吐?q行用户代码旉/(q用用户代码旉+垃圾攉旉)
Serial Old 攉?/div>
是Serial攉器的老年代版本,同样是单U程攉器。?#8220;标记-整理”法
Parallel Old 攉?/div>
是Parallel Scavenge攉器的老年代版本,使用多线和和“标记-整理法”QJDK1.6才提供?/div>
注重吞吐量及CPU资源敏感的场合,可以优先考虑Parallel Scavenge加Parallel Oldl合?/div>
CMS攉?QConcurrent Mark SweepQ?/div>
是一U以获取最短回收停时间ؓ目标的收集器?/div>
对于B/Sc重视服务器响应速度Q希望停时间最短类应用比较适合?/div>
Z“标记-清除法实现”
内存回收q程与用LEvq发的执行?/div>
~点Q?/div>
对CPU资源非常敏感?/div>
无法处理动垃圾
攉l束时会产生大量I间片
G1攉器(Garbage FirstQ`
JDK1.7正式发布Ӟ很可能会有一个成熟的商业版本随之发布?/div>
相对CMS的改q:
Z“标记-整理”法实现Q不会生空间碎?/div>
可以非常_的控制停?/div>
可以实现基本不牺牲吞吐量的前提下完成低停的内存回收


liwei5891 2013-10-09 21:35 发表评论
]]> վ֩ģ壺 1000žžδʮ| ˾þô߽Ƶ| 999ھƷѹۿ| þþþAVƬ| Ļѿ| ޾Ʒ| һƬɫ| ޾ƷAAƬѽ | ŷձ߹ۿ | պƵ| xvideosַ| hƵ߹ۿ| avƬ߹ۿ16Ů| 鶹Ʒѿ| 91͵ֻ߹ۿ| Ļ벥| ޳AVƬ߳ˮ| AVH߹ۿ| һaëһa˽| þ99޾Ʒۿ| ѹۿŮˮƵ| ޹bvվ| ѹۿ| ڵɫƵѹۿɫ| AV˿߹ۿ | 2022ѹƷ| ˮһ | caopornѹ| ƷĻһ| ëƬѲ| һһëƬѲ| ˵һavվ| ѿƬִֻ| ĻѹۿƵ| av߾Ʒ޵һվ| ޹Ʒ߹ۿ| AëƬAĻ| ޺ݺۺϾþѿ| ޳AVƬһ| ѿƬAëƬѿ| ҹƷþþþ|