【黑马程序员】JVM垃圾回收机制.doc

【黑马程序员】JVM垃圾回收机制.doc

ID:62028742

大小:51.00 KB

页数:8页

时间:2021-04-15

【黑马程序员】JVM垃圾回收机制.doc_第1页
【黑马程序员】JVM垃圾回收机制.doc_第2页
【黑马程序员】JVM垃圾回收机制.doc_第3页
【黑马程序员】JVM垃圾回收机制.doc_第4页
【黑马程序员】JVM垃圾回收机制.doc_第5页
资源描述:

《【黑马程序员】JVM垃圾回收机制.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、优选【黑马程序员】JVM垃圾回收机制JVM垃圾回收机制1.了解JVMJava是一门面向对象的语言,具有高可用,分布性,可移植性等众多优势,将代码运行在JVM平台上,强大的JVM与系统底层打交道,从而使程序员从直接与操作系统直接交互中解脱出来,且实现了c++不具备的自动回收垃圾功能,而随着Sun公司和Oracle公司不断的对JVM进行改造,使得JVM性能更加优越。2.JVM垃圾回收的意义在C++中,对象所占用的内存在程序员手动释放之前,无论这个对象是否是一个垃圾,这个对象所占用的内存空间都不会被释放,而这样的无用的对象若长

2、时间的存在于内存之中,势必造成内存紧X,从而影响程序的执行效率,而在Java中,一旦这个对象被视为无用对象之后,JVM会自动将其回收,以便将这个内存赋予给其他需要的对象所使用,但自动的垃圾回收也存在潜在的缺点,JVM需要时时的监控,追踪程序中对象是否可用,也消耗了性能3.JVM垃圾回收的原理  了解什么样的对象是一个垃圾·传统的教学:一直以来在传统的教学中,一直强调没有引用的对象是一个垃圾,且给出的说法是我们通过引用去最终找到堆内存中的对象,当这个引用不存在了,我们无法再次调用到这个堆内存中的实例,那么这样的对象是一个垃

3、圾,其实这种说法在JDK1.2以后已经是一种不正确的说法了8/8优选··传统教学对垃圾的定义:以上的说法专业的术语叫做引用计数算法(是Javajdk1.2以前采用的对垃圾定义方式),具体的做法是针对这个对象产生一个计数器,如果有一个引用指向它,那么这个对象的技术+1,若一个引用不再指向它,那么此时计数器-1,当这个对象在某个时刻它的计数器不大于0时,表明这个对象没有引用指向它,那么按照传统教学的说法此时这个对象是一个垃圾,但这种说法在对象出现了循环引用的情况下,该算法将失去意义,接下来解释什么是循环引用问题··循环引用问

4、题:·[Java] 纯文本查看 复制代码?0102030405060708091011publicclassDemo{        publicDemoinstance=null;        publicstaticvoidmain(String[]args){                 Demoa=newDemo();                 Demob=newDemo();                 a.instance=b;                 b.instance=a;   

5、              a=null;                 b=null;        }}8/8优选在这段代码中,此时demoa中的instance指向了b,demob中的instance指向了a,此时a到b的引用,b到a的引用都已经断开,demoa,demob两个对象都已经无法再次调用,故而两个对象都已经是垃圾,但根据引用计数算法(即传统的教学方式所描述的垃圾)该对象并非垃圾,因为此时a,b都存在互相指向的问题,我们把这样的问题称之为循环引用问题,--正确判断垃圾的标准:可达性算法·通过一系列的“G

6、CROOTS”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的链称之为引用链(ReachabilityAnalysis),当这个对象不能够到达“GCROOTS”顶点时,那么这样的对象才算是一个垃圾可以作为GCROOTS的四种对象1.本地方法栈中的JNI引用对象2.方法区中的常量引用对象3.栈帧中的局部变量表引用的对象4.方法区中类静态属性引用的对象8/8优选·8/8优选在这里需要解释的是在JVM规X中强调方法区和堆所属于逻辑上的一个整体,但在JVM具体的实现中,方法区又名no-heap即非堆,这里以实现为主··堆分

7、成两类类:··1.年轻代:新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。新生区又分为两部分:Edenspace和幸存者区(Survivorpace),所有的类都是在Eden区被new出来的。幸存区有两个:0区(Survivor0space)和1区(Survivor1space)。当Eden的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(MinorGC),将Eden区中的不再被其他对象所引用的对象进行销毁。然后将Eden中的剩余对象移动到幸存0区。

8、若幸存0区也满了,再对该区进行垃圾回收,然后移动到1区。那如果1区也满了呢?再移动到养老区。若养老区也满了,那么这个时候将产生MajorGC(FullGC),进行养老区的内存清理。若养老区执行了FullGC之后发现依然无法进行对象的保存,就会产生OOM异常“OutOfMemoryError”,通常FullGC所消耗的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。