当前位置: 首页> 文旅> 文化 > 建设局查询网站_企业管理有哪些课程_企业网站制作要求_建立一个企业网站需要多少钱

建设局查询网站_企业管理有哪些课程_企业网站制作要求_建立一个企业网站需要多少钱

时间:2025/8/26 23:20:33来源:https://blog.csdn.net/2301_76661918/article/details/146025754 浏览次数:0次
建设局查询网站_企业管理有哪些课程_企业网站制作要求_建立一个企业网站需要多少钱

Java语言的内存不需要程序员管理,通常也不允许程序员在外部申请内存,都是JVM进行管理,JVM也会对不在使用的垃圾进行回收以节省空间,

首先判断一个对象是否有用是非常关键的一环,主要有以下几个算法

引用计数法,对对象的被引用进行计数,当引用计数为零时,表示这个对象不再能被引用,失去了获取该对象的方法,因此此时该对象成为垃圾就会被回收。但是该算法存在一个问题就是,如果相关对象相互引用,即使没有方法得到这两个对象这两个对象依然有1的引用,不会被回收。

可达性分析法,为了改进上述方法引出,其采取了类似树的搜索结构,首先定义GCRoot根节点

每个GcRoot都有可能指向不同的对象,对象也可能向下指向别的对象,当GcRoot任务结束就会被销毁,例如方法执行完毕,如果此时,堆中的对象找不到任何一条路径到达GcRoot,也就是没法通过该对象找到GCRoot,此时就会被回收,这样就解决了相互之间引用无法被回收的问题。

最终判断,在可达性分析之后,进行二次判定是否进行挽留,也就是finalize方法,如果Object的子类重写了finalize方法,那么再回收之前会执行该方法,该方法有可能重新建立GcRoot来防止其被直接回收。

但是一般不这样使用,而是通常用来释放一些对象建立之初申请的资源,finalize方法不在主线程中调用,而是系统建立的低优先级线程,同时每个对象的finalize方法只会被执行一次。再次回收时不会执行。

结束对象判定后进入真正的垃圾回收流程,垃圾回收也有以下几个算法

分代收集机制

为了防止对经常使用的对象进行频繁的垃圾回收操作而导致性能下降,将堆内存分为,新生代,老年代,永久代(方法区的实现),其中老年代的垃圾回收频率较低。

其主要流程为,新申请的对先进入新生代的eden区,大对象直接进入老年代,接着对新生代GC之后,存活下来的对象就会被放进Survivor的To区,然后将From和To进行一次交换,下一次GC也是一样每一次都会将存活的放进to中,将from和to进行交换,而每一次经历GC对象的年龄标记就会增加,直到达到15就会晋升到老年区,具体流程看下图。

空间担保机制,当GC后Eden区有大量对象存活,超过Survivor(Eden:Survivor=8:2)区的大小,此时就会将一部份的对象直接放入老年区,相当于老年代进行担保,如果老年代也装不下就进行一次FullGC,如果还是装不下就直接报错弹出OOM异常。

一次MinorGc的过程

上方解决的是怎么回收,最后具体落实的回收算法如下

标记-清除算法

也就是使用上述的判断方法对需要回收的进行标记,再进行批量清除,这样虽然比较直接,但是由于是对被标记的块清除,而对无关的块不做动作就有可能产生大量的内存碎片,对内存连续性有巨大的影响。

标记-复制算法

为了解决上述清除算法导致的内存不连续,引出的该算法,该算法会将区域划分成两块将需要的对象复制并放到另一块中,保证内存的连续,再将另一块内存中的所有对象进行统一清除,这样虽然花费时间复制,但是却保证了内存的连续,适用于新生代经常能回收东西的区域,但是对于老年代就比较鸡肋,因为其内部通常变化不大,每次复制都会浪费很多时间,并且该方法会导致另外一半空间无法利用,因此不会在老年代使用。

标记-整理算法

为了在老年代进行GC且相对节约时间,就是将标记后的对象放在内存后方统一清除,这样虽然必然会损失性能,但是相对复制算法还是会节约时间并且可以充分利用空间,但是移动对象的位置有可能导致程序终止,因此通常和清除算法混合使用,也相对节约了时间。

垃圾收集器实现

Serial收集器,单线程收集器,开始收集时所有线程全部暂停,新生代使用复制算法,老年代使用整理算法,虽然会导致程序停止,但优势在于设计简单高效,在用户桌面程序内存较小情况,回收速度快,也是能接受的。

ParNew收集器,Serial的多线程版本,支持多线程收集,其余与Serial完全相同。

并发收集器

元空间,JDK8之后用来代替永久代,作为方法区的实现,解决其难以调优问题,因为永久代空间需要确定,小了容易溢出,大了又会导致浪费,元空间使用是与堆不相连的本地物理内存空间,因此有多少内存元空间就有多大。

通常的普通引用就是强引用,除非方法运行结束或引用链接断开,否则都不会导致回收时具有强应用的对象被回收,JVM会去抛出OOM,也不要回收强应用

而软引用则会在抛出异常之前被清理,创建方式如下

回收时会将其放入引用队列ReferenceQueue表示已被回收。

而弱引用则在每次回收时都会进行清理创建方法同软引用,回收流程同软引用

还有一种WeakHashMap ,若其中的Key没有其他引用指向就会被直接抛弃。

虚引用相当于没有引用,有可能随时被回收。

关键字:建设局查询网站_企业管理有哪些课程_企业网站制作要求_建立一个企业网站需要多少钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: