??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品天堂,欧美精品国产,精品一区二区在线观看http://www.aygfsteel.com/hunter129/category/53764.html天天学习Q好好向上! zh-cnFri, 27 Sep 2013 10:46:18 GMTFri, 27 Sep 2013 10:46:18 GMT60JAVA内存理Q四Q垃圾收集概念(下)http://www.aygfsteel.com/hunter129/articles/402212.htmlhunter129hunter129Wed, 31 Jul 2013 09:03:00 GMThttp://www.aygfsteel.com/hunter129/articles/402212.htmlhttp://www.aygfsteel.com/hunter129/comments/402212.htmlhttp://www.aygfsteel.com/hunter129/articles/402212.html#Feedback0http://www.aygfsteel.com/hunter129/comments/commentRss/402212.htmlhttp://www.aygfsteel.com/hunter129/services/trackbacks/402212.html
本系列文章由作?a title="hunter129" >@hunter129 译Q{载请注明出处?/div>
今天是第三章的剩余部分:4.性能度量指标Q?.分代攉的基本原理?br />
性能度量
   
一些指标用来评估垃圾收集的性能Q包括:

    吞吐量(ThroughputQ?br />         一个很长的周期中,除去p在垃圾收集上的时间占L间的癑ֈ比?br />     垃圾攉开销QGarbage collection overheadQ?br />         与吞吐量相反Q这是垃圾收集占L间的癑ֈ比?br />     Q译注:Z么需要两个指标呢Q对于ƈ发的垃圾攉法Q垃圾收集的部分d?span >应用同时q行D上述两个指标加v来会大于100%Q?br />     暂停旉QPause timeQ?br />         垃圾攉发生Ӟ应用pȝ暂停的时间?br />     攉频率QFrequency of collectionQ?br />         垃圾攉相对于应用系l运行发生的频率?br />     占用I间QFootprintQ?br />         一U大的指标Q例如堆大小?br />     反应旉QPromptnessQ?br />         对象变成垃圾之后?span >内存可用的时?br />         
一个交互式应用需要较低的暂停旉Q反之持l的执行旉对于非交互式应用更加重要。一个实时应用程序要求在垃圾攉中的暂停以及攉
器的整个周期拥有较少的抖动。运行在个h计算机或嵌入式设备中的应用可能主要关心小的空间占用?br />
分代攉

使用分代Qgenerational collectionQ收集技术时Q内存分为很多代QgenerationsQ,分离的存储池存储不同q龄的对象。例如,最通用的配|?br /> 中有两代Q一个用于存攑ֹȝ对象Q另一存放q老的对象?br />
不同的代使用不同的算法执行垃圾收集Q务,每个法会基于本代独特的特征q行优化。分代的垃圾攉Z一U被UCؓ弱分代假设(weak
generational hypothesisQ,它是关于在几U语aQ包?span >java语言Q编写的应用E序中观察到的结果:

    大部分的分配的对象不会被引用Q存z)很长旉Q这些对象在q轻的时候就L?br />     q老对象引用年d象的情况很少出现
   
q轻代的攉发生的相寚wJ、有效、快速,因ؓq轻代的I间通常比较ƈ且有很多的对象都不再被引用?br />
在年M几次攉后仍然生存的对象最l会晋升QpromotedQ或者被授予QtenuredQ到q老代。如?。年老代一般比q轻代大Qƈ且增长的速度
很慢。结果是Q年老代的收集很发生,但是会花Ҏ长的旉才能完成?br />
 
        ? 分代的垃圾收?br />    
为年M设计的收集算法主要关注在速度斚wQ因为垃圾收集经常发生。另一斚wQ在I间斚w更有效率的算法管理着q老代Q因为年老代占据?br /> 大部分的堆空间ƈ且年老代的垃圑֯度比较低?br />
此文已{UdQ?a >http://www.xiegq.com/2013/09/16/39.html


hunter129 2013-07-31 17:03 发表评论
]]>
JAVA内存理Q三Q垃圾收集概念(上)http://www.aygfsteel.com/hunter129/articles/402132.htmlhunter129hunter129Mon, 29 Jul 2013 13:50:00 GMThttp://www.aygfsteel.com/hunter129/articles/402132.htmlhttp://www.aygfsteel.com/hunter129/comments/402132.htmlhttp://www.aygfsteel.com/hunter129/articles/402132.html#Feedback0http://www.aygfsteel.com/hunter129/comments/commentRss/402132.htmlhttp://www.aygfsteel.com/hunter129/services/trackbacks/402132.html
本系列文章由作?a title="hunter129" >@hunter129 译Q{载请注明出处?/div>
W三章包?个小部分Q?.垃圾攉的基本概念,2.优秀垃圾攉器的特征Q?.攉器的设计选择Q?.性能度量指标Q?.分代攉的基本原理?br /> 内容比较长,我会分成2帖子发Q本章的内容是通用的,也就说这些内容同样适用于其他JVM的实玎ͼ甚至其他语言的VM的垃圾收集实现?br /> 今天的部分包?Q?Q以下是正文Q?br />
W三?垃圾攉概念

垃圾攉器负责以下几个事情:
    1.分配内存
    2.保被引用的对象留在内存?br />     3.回收执行?span >代码的引用无法到辄对象占用的内存(译注Q强调执行中是ؓ了排除对象互相引用的情况。A、B互相引用Q但没有M执行?br />     代码引用他们QA、B也应被回Ӟ
   
对象被引用称为活着的(liveQ。不再被引用的对象称为死掉的QdeadQ,术语叫垃圾(garbageQ。发现和释放Q或者叫回收QreclaimingQ)
q些垃圾占用的空间叫做垃圾收集(garbage collectionQ?br />
垃圾攉可以解决很多内存分配问题Q却不能解决所有的内存分配问题。例如,你可以创建对象ƈ无限期的引用着直到没有内存可用。垃圾收集在
使用其自w的旉?span >资源上是一个复杂的d?br />
垃圾攉器负责的内存是由_的算法来l织、分配和回收的,q对开?/span>人员隐藏。空间通常从一个被UCؓ堆(heapQ的非常大的内存池分配出来?br /> 垃圾攉的时间由垃圾攉器决定。通常Q整个堆或堆的一部分被填满或者达到某个阈值的时候,会触发垃圾收集?br />
满内存分配的请求是一个困隄dQ这其中包括要从堆中扑ֈ一个够大的内存块。对于大部分的动态内存分配算法,其主要的问题是需要在
保持内存分配和回收效率的同时避免内存片?br />
优秀的垃圾收集器的特?/strong>

垃圾攉器必L安全有效的。就是说Q用中?span >数据
永远不能?span >错误的释放,同时在很的几个攉周期内垃圑ְ应该被回收?br />
垃圾攉器的执行效率也必d优秀Q暂停时间不能太ѝ暂停的时候,应用是不q行的。然而,像大部分的计机pȝ那样Q这里也必须?br /> 旉、空间、频率之间做出权衡。例如,堆很的时候,垃圾攉的速度很快但堆被填满的速度更快Q这样就需要更频繁的垃圾收集。相反的Q大
的堆填满的速度慢,攉的频率也慢,但花费的旉会比较长?br />
另一个特征是有限的内存碎片(fragmentationQ。当垃圾对象的内存释攑֐Q释攄I间会在各种各样的区域Ş成小块的I隙以至于可能导致没
有一个够大的连l区域分配给较大的对象。一U减内存碎片的Ҏ叫做压羃QcompactionQ,在下面垃圾收集器的设计决{部分会讨论到?br />
可扩展性同样很重要。在多核pȝ上运行的多线E程序中Q内存分配、垃圾收集都不能成ؓ瓉?br />
设计决策

设计和选择垃圾攉法时必dZpd选择Q?br />    
    串行q是q行
        在串行收集中Q同一旉只做一件事情。例如,即便有多个cpu可用Q却只有一个进行收集工作。当使用q行攉Ӟ垃圾攉d会分
    成几个小的部分,q些的部分在不同的cpu上同时执行。同时执行的操作使得攉速度更快Q它的代h额外的复杂性和可能更多的内存碎
    片?br />
    q发的(ConcurrentQ还是停止一切(Stop-the-worldQ?/strong>
        当执行停止一切(Stop-the-worldQ的垃圾攉Ӟ应用pȝ在收集期间完全暂停(suspendedQ了。另外一U选择是,一个或多个垃圾
    攉d可以和应用系l同时ƈ发的执行。通常Q一个ƈ发的攉器,大部分工作ƈ发的执行Q但仍会有一些短暂的暂停Qstop-the-world
    pausesQ。停止一切的垃圾攉比ƈ发收集更单,因ؓ整个堆都ȝ了,在收集期间对象不会改变。它~点是一些应用程序不喜欢的暂?br />     QpausedQ。相应的Qƈ发收集的暂停旉更短Q但攉器必L外的心Q执行收集的同时应用pȝ可能会改变对象的状态,q会增加一
    些开销。ƈ发收集会影响性能q且需要较大的堆内存?br />    
    压羃 or 不压~?or 拯
        当收集器判定内存中的对象哪些是存zȝ哪些是垃圾之后,攉器可以压~(compactQ内存,所有存zȝ对象攑ֈ一P从而完全的
    恢复剩余的内存。压~之后,在第一个空闲位|分配内存将会非常的Ҏ和迅速。可以用一个简单的指针l持下一个可分配对象的位|。相
    对压~的攉器,非压~(non-compactingQ的攉器在原地Qin-placeQ释攑֞圑֯象占用的I间Q它不会像压~的攉器那L动存z?br />     的对象创Z个大的回收区。非压羃的好处是攉完成的很快,~点是可能有内存片。一般来_从原地释攄内存分配I间比从压羃?br />     堆分配内存更困难些。它必须搜素堆空间找C个够大能容Ux对象的连l内存区域。第三种可供选择的是复制QcopyingQ收集器Q拷?br />     Q或疏导evacuatesQ所有活动的对象到另一个不同的内存区域。它的好处是原来的区域可以直接置I,单快速的为随后的内存分配做好?br />     备,~点是需要额外的I间和时间?br />
此文已{UdQ?a >http://www.xiegq.com/2013/09/15/37.html


hunter129 2013-07-29 21:50 发表评论
]]>
JAVA内存理Q二Q对比直接和自动内存理http://www.aygfsteel.com/hunter129/articles/401846.htmlhunter129hunter129Mon, 22 Jul 2013 13:55:00 GMThttp://www.aygfsteel.com/hunter129/articles/401846.htmlhttp://www.aygfsteel.com/hunter129/comments/401846.htmlhttp://www.aygfsteel.com/hunter129/articles/401846.html#Feedback0http://www.aygfsteel.com/hunter129/comments/commentRss/401846.htmlhttp://www.aygfsteel.com/hunter129/services/trackbacks/401846.html
本系列文章由作?a title="hunter129" >@hunter129 译Q{载请注明出处?/div>
W二?直接 VS 自动内存

内存理是这L一些过E,识别哪些对象不再有用Q回Ӟ释放Q这些对象用的内存Qɘq些内存在随后的分配中可用。在一些编E语a中,
内存分配是程序员的责仅R这复杂的dD了很多常见的错误Q如怪异、错误的E序行ؓ和程序崩溃。结果是Q?span >开?/span>人员很大比例的时间都
在调试解册些错误?br />
在直接内存管理的E序中经常犯的一个错误是悬挂引用Qdangling referencesQ。对象用的I间被回收时Q可能还有其他对象引用着。如?br /> 一个对象拥有这P悬挂Q的引用Q当它试图访问原始对象时Q很可能q块I间已经分配l了新的对象Q结果导致了未预期的讉K?br />
另外一个在直接内存理中常见的错误是内存泄Ԍspace leaksQ。内存分配完不再使用后却没有释放׃产生q样的错误。例如,你打释?br /> 一个链表(linked listQ用的I间时犯了一个错误,只回收了链表的第一个对象,其余的对象就不再被引用了Q然而这些对象脱ME序的控
Ӟ再也无法使用或恢复。如果生了_的泄Ԍ内存持l消耗,直到再也没有可用的部分?br />
作ؓ替代ҎQ一U称为垃圾收集(garbage collectorQ的自动内存理Ҏ正在被广泛用,其是在C的面向对象语a中。自动内存管?br /> 使得~写出更多抽象的接口、更多稳?span >代码成ؓ可能?br />
垃圾攉避免了悬挂引?span >问题Q因某处引用的对象永q不会被攉Q内存不会被释放。垃圾收集同栯决了上面提到的内存泄露问题,因ؓ?br /> 再被引用的内存将自动释放?br /> Q译注:实际?span >java中依然有“内存泄露”问题Q只是这U泄露与上文中提到的传统上的泄露不同。可以理解ؓ对内存的不恰当用,会导致垃圾收
集频J发生[本应存储对象的没有存储下来]Q或OOM错误[本来应释攄内存没有释放]。)

上一:JAVA内存理Q一Q综q和介绍
此文已{UdQ?a >http://www.xiegq.com/2013/09/14/25.html


hunter129 2013-07-22 21:55 发表评论
]]>
JAVA内存理Q一Q综q和介绍http://www.aygfsteel.com/hunter129/articles/401810.htmlhunter129hunter129Sun, 21 Jul 2013 15:03:00 GMThttp://www.aygfsteel.com/hunter129/articles/401810.htmlhttp://www.aygfsteel.com/hunter129/comments/401810.htmlhttp://www.aygfsteel.com/hunter129/articles/401810.html#Feedback1http://www.aygfsteel.com/hunter129/comments/commentRss/401810.htmlhttp://www.aygfsteel.com/hunter129/services/trackbacks/401810.html
本系列文章由作?a title="hunter129" >@hunter129 译Q{载请注明出处?br />
准备发一pd帖子Q主要介l?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=java">java?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=%C4%DA%B4%E6">内存理机制?br /> 主要内容是对sun的内存管理白皮书《Memory Management in the Java HotSpot™ Virtual Machine》的译Q也会加上自q理解?br /> 英文不好Q我慢慢译Q大家慢慢看。当然可以去看原版,作ؓ附g上传了?br />
q是W一帖子,主要内容是白皮书的第一章,Ҏ文的介绍?br />
W一?介绍
Java的一个长处就是提供了自动内存理机制Q因此屏蔽了开?/span>人员q行直接内存理的复杂性?br /> q篇文章提供了一个针对J2SE 5内存理的概览。描qC垃圾攉器(garbage collectorsQ如何有效的q行内存理Qƈl出了一些关于收
集器的选择和收集器q行时内存区域大配|的。这文章还列出了媄响垃圾收集器Qgarbage collectorQ行为最常用的选项Qƈ且提?br /> 了很多详l文的链接Q因此本文可以作为参?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=%D7%CA%C1%CF">资料
使用?br />
W二章ؓ初学者介l自动内存管理的概念。本章会单的讨论一下自动内存管理和E序员直接内存管理?br />
W三章整体介l了垃圾攉的概c?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=%C9%E8%BC%C6">设计决策?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=%D0%D4%C4%DC">性能度量。同Ӟ介绍了基于对象生命周期的分代内存理机制Q这是一U常用的内存l织方式?br /> q种Ҏ已经被证明在减少垃圾攉暂停旉、很宽泛应用范围内的整体消耗方面很有效?br />
剩下的部分是针对HotSpot JVMQ译注,HotSpot JVM是Sum/Oracle 开发的一UJVMQ其他的q有BEA/Oracle的JRockitQ?span href="http://www.aygfsteel.com/hunter129/admin/tag.php?name=IBM">IBM的J9 VM{)的内宏V?br />W四章介l了4钟垃圾收集器Q其中一个是在J2SE 5.0 update6中增加的Qƈ且描qC分代的内存组l。对于每U垃圾收集器Q简要描qC们?br /> 的算法类型和调优参数?br />
W五章描qC一U在J2SE 5.0提供的新技术,它会Ҏ应用q行的^台和操作pȝ自动选择垃圾攉器和堆大,q根据用戯为动态进?br /> 垃圾攉优化。这U技术称为功效学QergonomicsQ?br />
W六章给Z一些垃圾收集器的选择和配|的推荐配置Q同时也提供了一些处理OutOfMemoryError错误的徏议。第七章要描qC一些用于垃圾收
集性能Qgarbage collection performanceQ评估的工具。第八章列出了用于控制垃圾收集器的选择和行为最常用的命令行参数。最后,W九章提
供了更多涉及q篇文章内容的详l文?br />
附gL步金山快盘下载:http://www.kuaipan.cn/file/id_60654657730512059.htm

此文已{UdQ?a >http://www.xiegq.com/2013/09/11/12.html


hunter129 2013-07-21 23:03 发表评论
]]>
վ֩ģ壺 | | Դ| | | Դ| ÷| | | Ϫ| | | | | | ڳ| | | ̨| | Ҵ| | | | | ̨| | ³| »Ȱ| | | | | ®| Ž| | | | Ϫ| ¬| |