做外国网站自媒体网络工程师和做网站哪个难
news/
2025/9/24 17:12:09/
文章来源:
做外国网站自媒体,网络工程师和做网站哪个难,怎么自己做图片,安阳网络推广代理————— 第二天 —————————————————下面我们一起来研究这三个问题。问题1#xff1a;哪些是需要回收的#xff1f;首先我们需要知道如何哪些垃圾需要回收#xff1f;判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。引用计… ————— 第二天 —————————————————下面我们一起来研究这三个问题。问题1哪些是需要回收的首先我们需要知道如何哪些垃圾需要回收判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。引用计数算法引用计数算法很简单它通过记录对象被引用的次数从而判断该对象的重要程度。如果该对象被其它对象引用则它的引用计数加一如果删除对该对象的引用那么它的引用计数就减一当该对象的引用计数为0时那么该对象就会被回收。引用计数存在什么问题呢当有两个对象相互引用时由于它们互相引用对方所以计数都不为零这就会导致这两个对象无法回收。所以Java虚拟机采用的是另一种方法来判断对象是否存活它就是可达性分析算法。可达性分析算法可达性分析算法首先要确定一系列根对象GC Roots并从根对象为起点根据对象之间的引用关系搜索出一条引用链Reference Chain,在引用链的对象就存活而不在引用链的对象就认定为可回收对象。有一个比喻十分恰当可达性分析算法就好比是在清洗葡萄串我们可以从一根枝提起一大串葡萄他们就像一串引用链而没有和引用链相连的对象就像是散落在池子里的葡萄可以回收。虚拟机栈中引用的对象正在运行的方法使用到的变量、参数等方法区中类静态属性引用的对象static关键字声明的字段方法区中常量引用的对象(也就是final关键字声明的字段)本地方法栈中引用的对象native方法Java虚拟机内部的引用。系统内部的东西当然能作为根了问题2有哪些重要的垃圾回收算法学会判断内存中哪些垃圾需要回收后我们就需要掌握几个重要的垃圾回收算法。标记-清除算法标记-清除法是最基本的一种垃圾回收算法总的来说分为两步标记标记所有需要回收的对象灰色也就是在做垃圾的判定。清除将标记为灰色的部分清除掉。需要注意的是所谓的清除并不需要真正地把整个内存的字节进行清零操作只需要把空闲对象的起始结束地址记录下来放入空闲列表里表示这段内存是空闲的就行。优点速度快只需要做个标记就能知道哪一块需要被回收但是他的缺点也是致命的。他的主要缺点有两个一是执行效率不稳定二是会涉及到内存碎片化的问题。可能有人会问碎片化是什么意思呢上面所描述的这个栈通过标记清除法虽然是清除了空间但是清除出来的内存是大量的不连续内存碎片像下面的这块对象明明整体都有位却因为不连续无法放入这是标记-清除算法最大的缺点。所谓标记复制算法和标记整理算法都是对标记清除算法缺点的改进所以才说标记清除算法是最基础的方式。标记-整理算法与标记-清除算法不同标记-整理算法是移动式的。他会让所以存活的对象都向内存空间一端移动然后清除到边界以外的内存。标记移动是什么样的弊端呢标记-整理算法涉及到了对象的移动在整理阶段由于移动了可用对象需要去更新引用。效率就低了。标记-复制算法标记-复制算法相比前面的比较不同他将内存空间分为两块在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中然后呢再清除正在使用的内存块中的所有对象。最后再交换两个内存的角色最后完成垃圾回收。大体来看可以分为 这么几个步骤复制清空易位不难看出标记复制算法不需要标记算是提升了效率。此外他也不会参数碎片问题。但是。标记复制算法的缺点也是十分明显的它需要双倍空间。问题3垃圾回收的具体流程是怎样的既然说JVM虚拟机不会单独采用某种算法而是会结合三种算法让他们协同工作其具体的实现就是java虚拟机里的分代垃圾回收机制。上图所示就是Java堆内存的划分。为什么需要这么划分区域呢那是因为我们的java对象寿命都是不同的有的可能需要长时间使用而有的可能用完就可以丢去。于是我们可以根据其生命周期的不同特点进行不同的垃圾回收策略。总的来说新生代的垃圾回收比较频繁老年代很久才触发一次垃圾回收。新生代处理的都是一些朝生夕死的对象而老年代回收的是更有价值的会长时间存活的对象。举个很好理解的例子新生代处理垃圾就像是处理生活日用垃圾而老年代处理的垃圾更像是过年大扫除家里实在太多垃圾了来一次重清理。大扫除清理的垃圾都是在家中存放时间较长的往往可能曾经很受用如今退役了先放着过年再打扫清除掉。每一次我们创建一个对象都会在伊甸园区占据一定内存大小渐渐地伊甸园就满了。当我们再要创建对象时就会发现空间不够了。这时就会触发一次垃圾回收新生代触发的垃圾回收有个称呼叫做MinorGC。MinorGC触发后伊甸园区就会对各个对象进行可达性分析从而知道哪些对象应该作为垃圾被清理。MinorGC在这里采取的是标记复制算法它将有用的对象存放到幸存区to然后把伊甸园中的对象清除掉。进入幸存区的幸运儿将会被标记上一个“幸运值”代表他们抗住了多少次清理。最后幸存区to和幸存区from还需要交互一下位置这里不是指物理位置交换而是说它俩的定义发生了交换下次就是左边那个为幸存区to右边的为幸存区from了。换句话说幸存区to始终是空的。我们再模拟多几次加深一下印象假如又进来了不少对象伊甸园又满了那就会触发一次MinorGC把幸存者移步到幸存区to其他一律清空。最后别忘了幸存区from和幸存区to又要再交换一下”位置“。...
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915993.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!