秒速飞艇手机版

秒速飞艇手机版官网
国内秒速飞艇手机版 当前位置:首页 > 国内秒速飞艇手机版 > 正文

杭州千锋JAVA课程:如何判断对象是否可回收?

前锋java课程以其专业和可靠性而闻名。 今天的小编辑分享了钱峰老师精心组织的学生在学习中经常遇到的问题。 我正在学java的朋友,请快点收集!

1。参考计数器算法

杭州前锋JAVA教程:如何判断对象是否可以回收?

解释

系统为每个对象添加一个引用计数器。每当有引用该对象的地方时,计数器就递增1。当引用失败时,计数器递减1。任何时候计数器为0的对象都是不能使用的对象,因为没有地方保存此引用。此时,该对象被视为内存垃圾,等待虚拟机回收。

秒速飞艇手机版客观地说,参考计数器算法,他的实现非常简单,判断效率非常高。在大多数情况下,这个算法相当好。

事实上,这种算法已经在很多情况下使用过了,比如IOS Object-C和微软的COM技术(用于开发窗口驱动程序)。网络技术几乎是建立在通信基础上的)。Python语言等。

不能解决循环引用的问题。

秒速飞艇手机版不能解决循环引用的问题。

这就像一个在悬崖边采集草药的人。为了生存,他必须有一根绳子绑在悬崖上。如果有两个人,甲的手握着悬崖,乙的手握着甲,那么他们都可以活下去。然而,如果甲的手握着乙,乙的手也握着甲,虽然他们都认为自己被别人握着,但他们会从悬崖上摔下来。

例如,对象A的属性指的是B,而对象B的属性指的是A . B=B()B . A=A();对象的计数器都是1。但是,如果在其他任何地方都没有引用甲乙对象,甲乙对象实际上不能在系统中扮演任何角色。因为它们不能发挥任何作用,所以它们应该被当作内存垃圾来处理和清理。但是,因为此时A和B的计数器都是1,所以虚拟机无法回收A和B对象,从而导致内存浪费。这在计算机系统中是不可容忍的。

解决方案

秒速飞艇手机版是在语言级别处理的。例如,Object-C使用强引用类型和弱引用类型来解决这个问题。强引用计数器递增1,而弱引用不递增

Java也有强引用和弱引用

2。可达性分析算法

解释

秒速飞艇手机版该算法使用一系列成为“气相色谱根”的对象作为起点。从这些节点开始,向下搜索所有路径成为参考链。当一个对象的气相色谱根不与任何引用链连接时(在图论中,气相色谱根无法到达该对象),证明该对象不可用

advantage

秒速飞艇手机版该算法可以轻松解决循环引用

大多数主流java虚拟机使用该算法

3的问题。虚拟机堆栈中由Java语言中的GC Roots

秒速飞艇手机版引用的对象(实际上是堆栈框架中的本地变量表)

方法区域中的类静态属性引用对象

方法区域中的常量引用对象

秒速飞艇手机版本地方法堆栈中JNI的引用对象(通常称为本机方法)

更多java技术分享,欢迎关注小编辑,也可以加入我们的技术交流小组,欢迎每一个小伙伴加入,这里有专业讲师回答您的问题!



秒速飞艇手机版官网 版权所有© yklf888.com 技术支持:秒速飞艇手机版官网 | 网站地图