一月份的收款哪些可以作为gcroot去年的盈利吗

版权声明:本文为博主原创文章遵循

版权协议,转载请附上原文出处链接和本声明

GcRoot是垃圾回收器算法中判断一个对象是否可以回收的一种算法

就是对象到达GcRoot的路径是否还有可达,即是否有可引用链如果有,这表明对象还存在着引用
如果没有,则表明该对象没有引用在下一次垃圾回收时就会被回收

1.虚拟机栈:栈帧中的本地变量表引用的对象

3.方法区中的静态变量和常量引用的对象

一:jvm内存回收算法一般有两种

1、引用计数法:如果有地方引用该对象该对象的引用计数就+1,如果引用失效的话就减一计数器为0的对象不可以被使用。

2、可达性分析法:如果我们将一些GC Roots对象作为起始点从这些节点向下搜索,搜索到的路径为引用链如果有一些对象没有任何引用链相连,那么这个对象對于GC Roots是不可达的即使它们之间可能相互产生关联,所以将其判定为可回收对象

objB这个时候两个对象都不能被访问,但是互相引用导致引鼡计数不为0这不就无法判定为死亡了吗?我们如果是GC能允许这种长生不死的存在吗?肯定不所以引用计数法并没有被采用在目前的JVM垃圾回收器中。所以jvm使用的是可达性分析法算法

二:什么是可达性分析算法呢

可达性分析算法:通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时或者该对象不是GCRoot对象时)则认为该对象鈈可达,后面该对象将会被垃圾收集器回收其所占的内存

三:在java语言中,什么对象可作为GCRoot的对象

    b.方法区中的类静态属性引用的对象。 (一般指被static修饰的对象加载类的时候就加载到内存中。)

四:怎么理解上面4中类型的GCroot对象呢

  b.方法区中的类静态属性引用的对象(一般指被static修饰的对象,加载类的时候就加载到内存中)

c.方法区中的常量引用的对象

d.本地方法栈中的JNI(native方法)引用的对象

六:方法区中的数据什么时候被回收

看到一个老问题Java是如何判定回收哪些对象的?

答:从gcRoot根搜索不可达且标记清理一次之后仍没有被复活的对象,会被认定为垃圾对象进行清理注意在Java中没有对象的作用域,只有对象的引用的作用域Java垃圾回收没有采用引用计数算法,因为它不好解决循环引用问题Java垃圾算法实际上是标记出那些对象是被引用在用的,其它没被标记的就是没用的可以回收而不是直接找出哪些对象是没用的。

那么哪些对象哪些可以作为gcrootgcRoot呢?

它其实是一组根引用主要包括虚拟机栈中的局部变量表(实际就是所有正在被调用的方法等参数局部变量等),类的静态属性引用常量对象引用,夲地方法栈中对象引用实际上Java垃圾回收主要是针对堆内存的,这些引用则来自于JVM运行时数据区的其它几部分:虚拟机栈本地方法区,方法区

Java中引用类型包含哪几类,有什么用

最常用到的是强引用,只有这种引用存在垃圾回收时就不会清理它指向的对象。其次是软引用只有在垃圾回收内存空间不足时才会回收这类引用指向的对象,多用在缓存对象中再其次是弱引用,只要发生垃圾回收就会被回收最后是虚引用,是引用关系最弱的一种

我要回帖

更多关于 哪些可以作为gcroot 的文章

 

随机推荐