• Java中gcRoot和引用类型


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

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

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

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

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

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

  • 相关阅读:
    metal的gpu query
    体积雾 global fog unity 及改进
    hdr rt format对颜色的影响
    unity deferred lighting
    unity linear space时 photoshop blend的正确设置
    unity linear work flow
    一些数据 bandwidth之类
    deferred rendering with msaa
    unity 显示mipmaplevel
    【转】在C#中使用SendMessage
  • 原文地址:https://www.cnblogs.com/doit8791/p/8984789.html
Copyright © 2020-2023  润新知