java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN

上传人:油条 文档编号:2674444 上传时间:2017-07-26 格式:PDF 页数:15 大小:1.28MB
返回 下载 相关 举报
java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN_第1页
第1页 / 共15页
java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN_第2页
第2页 / 共15页
java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN_第3页
第3页 / 共15页
java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN_第4页
第4页 / 共15页
java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN》由会员分享,可在线阅读,更多相关《java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程-小鸥的博客-博客频道-CSDN(15页珍藏版)》请在金锄头文库上搜索。

1、2016/6/15 java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程小鸥的博客博客频道CSDN.NEThttp:/ 1/15标签:java jvmgeneration outofmemoryerror parallel cms【专家问答】韦玮:Python基础编程实战专题【知识库】Swift资源大集合【公告】博客新皮肤上线啦java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程2012020113:27 3964人阅读 评论(1)收藏举报分类:java内存模型JVM内存模型中分两大块,一块是NEWGeneration,另一块是OldGeneration.在Ne

2、wGeneration中,有一个叫Eden的空间,主要是用来存放新生的对象,还有两个SurvivorSpaces(from,to),它们用来存放每次垃圾回收后存活下来的对象。在OldGeneration中,主要存放应用程序中生命周期长的内存对象,还有个PermanentGeneration,主要用来放JVM自己的反射对象,比如类对象和方法对象等。在NewGeneration块中,垃圾回收一般用Copying的算法,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个SurvivorSpace,当SurvivorSpace空间满了后,剩下的live对象就被直接拷贝到OldGenerat

3、ion中去。因此,每次GC后,Eden内存块会被清空。在OldGeneration块中,垃圾回收一般用markcompact的算法,速度慢些,但减少内存要求.垃圾回收分多级,0级为全部(Full)的垃圾回收,会回收OLD段中的垃圾;1级或以上为部分垃圾回收,只会回收NEW中的垃圾,内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。1,outofmemory只发生在jvm对old和permgeneration回收后还不能获足够内存的情况.当一个URL被访问时,内存申请过程如下:A.JVM会试图为相关Java对象在Eden中初始化一块内存区域B.当Eden

4、空间足够时,内存申请结束。否则到下一步C.JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区D.Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区E.当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)F.完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”outofme

5、mory错误”造成fullgc的原因:new了很多对象,没有即时在主动释放掉Eden内存不够用不断把对象往old迁移old满了fullgcfullgc如何预防,:1,使用了缓存访问有两种,第一种是缓存命中率不高的访问,第二种种是缓存命中率很高的访问.对于第一种情况,就没必要缓存了,缓存反而效果不好,浪费内存,没有提升程序效率还浪费空间,特别是如果这种访问量级别很大的时候还会导致fullgc.第二种情况,不得不缓存很多对象,不缓存的话就要调用数据库或者其它是要发生io的,所以这时候要不就是想办法减少缓存对象的大小,例如不缓存没必要缓存的原创:转载:译文:评论:个人资料zeo访问:积分:等级:排名

6、:文章搜索常用网站百度必应谷歌翻译在线翻译携程旅行网火车时刻表查询火影忍者论坛智联招聘前程无忧黑客档案杂志ip查询文章分类oracle&其相关产品db2mysqlpgsqlMSsqlserver云计算emfgefgmf目录视图 摘要视图 订阅小鸥的博客知识在于积累-Knowledgeisatreasure.butpracticeisthekeytoit.java&jvm(347)7982838次92924第8名310篇8975篇1篇245条(543)(81)(197)(36)(22)(156)(30)(24)(8)2016/6/15 java内存模型及GC原理和图解JVM在内存中申请对象及垃圾

7、回收流程小鸥的博客博客频道CSDN.NEThttp:/ 2/15数据,或者合并一些数据减少内存的使用.如果还是不行那就加机器,加内存.总结:在不影响功能的情况下,缓存对象越小越要,命中率越高越好.低命中率的缓存对象还不如不缓存.2,没使用缓存的情况,貌似不会出现fullgc的情况,除非内存太小,或者设置不对,程序有漏洞.java内存管理以及GC(强烈推荐)目录内存管理简介GC简介好的Collector的特性设计或选择CollectorGC性能指标分代GCJavaCollector快速内存分配GC根集合SerialCollectorParallelCollector/ThroughputColl

8、ectorParallelCompactingCollectorConcurrentMarkSweepCollector(CMS)4种Collector的对比和适用场景。ErgonomicsGC调优OutOfMemoryErrorfreeMemory(),totalMemory(),maxMemory()jmap工具的使用内存管理简介内存管理的职责为分配内存,回收内存。没有自动内存管理的语言/平台容易发生错误。典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知。另一个典型问题为内存泄露,内存已经分配,但是已经没有了指向该内存的指针,导致内存泄露。程序员

9、要花费大量时间在调试该类问题上。GC简介因此引入了GarbageCollector机制,由运行时环境来自动管理内存。GarbageCollector解决了悬挂指针和内存泄露大部分的问题(不是全部)。注意GarbageCollector(简称Collector)和GarbageCollection(简称GC)的区别。Collector的职责:分配内存。保证有引用的内存不被释放。回收没有指针引用的内存。对象被引用称为活对象,对象没有被引用称为垃圾对象/垃圾/垃圾内存,找到垃圾对象并回收是Collector的一个主要工作,该过程称为GC。Collector一般使用一个称为堆的内存池来进行内存的分配和

10、回收。java&jvmj2ee&ejbwebspherejavascriptbidatacenterjbossChukWaAvrotomcatweblogic路由器交换机bpel&bpmPigwidwpshttps&TCP/IP协议SERVLETantSockettcp&udpaxis数据结构设计模式&oolinuxsoapldap日语sysmletlnetcavpn存储xmlumlraw裸设备vmware&虚拟化webservicestrutsspringHibernatejqueryextjsajaxeclipse&myeclipseesbsoahtmljsp&servletcss正则表达

11、式HA&负载均衡&集群算法&逻辑jdk&jre编程规范&质量保证防火墙&杀毒aix&unix英语面试&笔试题oca&ocpscjp测试基础&测试类别经典文章(348)(93)(42)(100)(36)(16)(10)(1)(1)(112)(9)(30)(38)(3)(2)(5)(9)(10)(2)(126)(37)(13)(9)(47)(116)(650)(5)(23)(71)(6)(2)(4)(7)(34)(15)(296)(4)(57)(15)(37)(104)(28)(94)(17)(7)(83)(9)(132)(174)(35)(38)(12)(32)(166)(46)(48)(18)

12、(35)(157)(138)(0)(1)(95)(165)2016/6/15 java内存模型及GC原理和图解JVM在内存中申请对象及垃圾回收流程小鸥的博客博客频道CSDN.NEThttp:/ 3/15一般的,当堆内存满或者达到一个阀值时,堆内存或者部分堆内存被GC。好的Collector的特性保证有引用的对象不被GC。快速的回收内存垃圾。在程序运行期间GC要高效,尽量少的影响程序运行。和大部分的计算机问题一样,这是一个关于空间,时间,效率平衡的问题。避免内存碎片,内存碎片导致占用大量内存的大对象内存申请难以满足。可以采用Compaction技术避免内存碎片。Compaction技术:把活对象

13、移向连续内存区的一端,回收其余的内存以便以后的分配。良好的扩展性,内存分配和GC在多核机器上不应该成为性能瓶颈。设计或选择Collector串行或并行。串行Collector在多核上也只有一个线程在运行,并行Collector可以同时有多个线程执行GC,但是其算法更复杂。并发或StoptheWorld。StoptheWorldCollection执行GC时,需要冻住所有内存,因此更简单一些,但是,在GC时,程序是被挂起的。并发GC时,程序和GC同时执行,当然,一般的并发GC算法还是需要一些StoptheWorld时间。CompactingorNoncompactingorCopyingComp

14、acting:去除内存碎片,回收内存慢,分配内存快。Noncompacting:容易产生内存碎片,回收内存快,分配内存慢,对大对象内存分配支持不好。Copying:复制活对象到新的内存区域,原有内存直接回收,需要额外的时间来做复制,额外的空间来做存储。GC性能指标Throughput:程序时间(不包含GC时间)/总时间。GCoverhead:GC时间/总时间。Pausetime:GC运行时程序挂起时间。FrequencyofGC:GC频率。Footprint:ameasureofsize,suchasheapsize。Promptness:对象变为垃圾到该垃圾被回收后内存可用的时间。依赖于不同

15、的场景,对于GC的性能指标的关注点也不一样。分代GC分代GC把内存划分为多个代(内存区域),每个代存储不同年龄的对象。常见的分为2代,young和old。分配内存时,先从young代分配,如果young代已满,可以执行GC(可能导致对象提升),如果有空间,则分配,如果young代还是没有空间,可以对整个内存堆GC。young代GC后还存活的对象可以提升到old代。该机制基于以下观察事实:大部分新分配的对象很快就没有引用了,变成垃圾。很少有old代对象引用young代对象。基于代内存存储对象的特性,对不同代的内存可以使用不同的GC算法。Young代GC需要高效,快速,频繁的执行,关注点主要在速度上。Old代由于增长缓慢,因此GC不频繁,但是其内存空间比较大,因此,需要更长时间才能执行完GC。关注点在内存空间利用率上。apachephpc+&c#cssoportal

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号