当前位置: 首页 > wzjs >正文

工程项目查询哪个网站网络营销和网络销售的关系

工程项目查询哪个网站,网络营销和网络销售的关系,厂房装修东莞网站建设,wordpress安装详细JVM 垃圾回收器(Garbage Collector)需要判断哪些对象是“垃圾”,即不再被程序使用的对象,以便回收它们占用的内存。JVM 主要使用以下两种方法来判断对象是否是垃圾: 1. 引用计数算法 (Reference Counting): 原理&…

JVM 垃圾回收器(Garbage Collector)需要判断哪些对象是“垃圾”,即不再被程序使用的对象,以便回收它们占用的内存。JVM 主要使用以下两种方法来判断对象是否是垃圾:

1. 引用计数算法 (Reference Counting):

  • 原理:

    • 为每个对象维护一个引用计数器。
    • 当一个对象被引用时,引用计数器加 1。
    • 当一个对象的引用被置为 null 或超出作用域时,引用计数器减 1。
    • 当一个对象的引用计数器为 0 时,表示该对象不再被任何地方引用,可以被回收。
  • 优点:

    • 实现简单: 只需要维护一个计数器。
    • 实时性高: 当对象的引用计数器变为 0 时,可以立即回收该对象。
  • 缺点:

    • 无法解决循环引用问题: 如果两个或多个对象相互引用,即使它们不再被其他对象引用,它们的引用计数器也不会变为 0,导致无法回收。
    public class ReferenceCountingGC {public Object instance = null;public static void main(String[] args) {ReferenceCountingGC objA = new ReferenceCountingGC();ReferenceCountingGC objB = new ReferenceCountingGC();objA.instance = objB; // objA 引用 objBobjB.instance = objA; // objB 引用 objAobjA = null; // objA 不再引用对象objB = null; // objB 不再引用对象// 此时,objA 和 objB 相互引用,引用计数器都不为 0,无法被回收 (即使它们已不再被使用)// ...}
    }
    
  • HotSpot VM 是否使用: HotSpot VM 不使用引用计数算法,因为它无法解决循环引用问题。

2. 可达性分析算法 (Reachability Analysis) (根搜索算法):

  • 原理:

    • 从一组称为 “GC Roots” 的根对象开始,沿着对象引用链进行遍历。
    • 如果一个对象到 GC Roots 之间没有任何引用链相连,则说明该对象不可达,可以被回收。
    • 可达的对象会被标记, 不可达的对象被认为是垃圾.
  • GC Roots:

    • 虚拟机栈 (VM Stack) 中引用的对象: 局部变量、方法参数等引用的对象。
    • 方法区中类静态属性引用的对象: static 变量引用的对象。
    • 方法区中常量引用的对象: final 修饰的常量引用的对象。
    • 本地方法栈中 JNI (Java Native Interface) 引用的对象: Native 方法引用的对象。
    • Java 虚拟机内部的引用: 例如, 基本数据类型对应的 Class 对象, 一些常驻的异常对象(NullPointerException, OutOfMemoryError 等), 系统类加载器.
    • 被同步锁 (synchronized 关键字) 持有的对象。
    • 反应Java虚拟机内部情况的 JMXBean、JVMTI 中注册的回调、本地代码缓存等。
  • 优点:

    • 可以解决循环引用问题。
    • 准确性高。
  • 缺点:

    • 需要暂停应用程序 (Stop-The-World): 在进行可达性分析时,需要暂停所有 Java 线程,以保证分析结果的准确性。
    • 实现复杂。
  • HotSpot VM 是否使用: HotSpot VM 使用可达性分析算法

对象死亡的判定 :

即使通过可达性分析算法判断一个对象不可达,它也不会立即被回收。对象真正死亡需要经历至少两次标记过程:

  1. 第一次标记:

    • 如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链,则会被第一次标记。
    • 会进行筛选, 判断此对象是否有必要执行 finalize() 方法。
    • 如果对象没有覆盖 finalize() 方法,或者 finalize() 方法已经被虚拟机调用过,则会被判定为“没有必要执行”。
    • 如果对象覆盖了 finalize() 方法, 且还没有被调用过, 则会将该对象放置在一个名为 F-Queue 的队列中。
  2. finalize() 方法的执行 (如果有):

    • 稍后由一条由虚拟机自动建立的、低调度优先级的 Finalizer 线程去执行它们的 finalize() 方法。
    • 注意:
      • finalize() 方法是对象逃脱死亡的最后一次机会。
      • finalize() 方法中,只要将对象重新与引用链上的任何一个对象建立关联(例如,将 this 赋值给某个类变量或对象的成员变量),就可以避免被回收。
      • finalize() 方法只会被系统自动调用一次。如果对象在 finalize() 方法中逃脱了死亡,下次再被标记时,finalize() 方法不会再被执行。
      • 不建议使用 finalize() 方法进行资源释放,因为它的执行时间不确定,可能会导致资源长时间得不到释放。
      • finalize 方法可能会导致性能问题,应尽量避免使用。
  3. 第二次标记:

    • 如果在 finalize() 方法中对象成功逃脱了死亡,则不会被回收。
    • 如果在 finalize() 方法中对象没有逃脱死亡,或者对象没有覆盖 finalize() 方法,或者 finalize() 方法已经被虚拟机调用过,则会被第二次标记。
    • 被第二次标记的对象会被放置在一个名为 F-Queue 的队列中, 等待被回收.

总结:

JVM 使用可达性分析算法来判断对象是否是垃圾。从 GC Roots 开始,沿着对象引用链进行遍历,如果一个对象到 GC Roots 之间没有任何引用链相连,则说明该对象不可达,可以被回收。即使对象不可达,也不会立即被回收,需要经历至少两次标记过程,并且有机会在 finalize() 方法中逃脱死亡。

http://www.dtcms.com/wzjs/342760.html

相关文章:

  • 汉中免费做网站公司搜索引擎的优化方法有哪些
  • 个人养老保险杭州网站seo推广软件
  • wordpress管理员评论在哪儿设置seo网络优化日常工作内容
  • 网站代理怎么赚钱如何让百度收录网址
  • 企业网站建设技术在线的crm系统软件
  • 网站开发赚钱吗 知乎搜索引擎营销方法
  • 上海哪里可以做网站东莞建设企业网站
  • 笔记本电脑做网站比较畅快百度世界500强排名
  • 什么是网站和网页站长之家域名查询
  • 网站做子域名今天的新闻 最新消息
  • 外贸网站建设 全球搜东莞网络公司排行榜
  • 济南建设厅网站免费直链平台
  • 跟我一起做网站seo网站排名全选
  • 电商网站建设服务seo行业
  • 厦门seo计费西安百度推广优化公司
  • flash型网站淘宝关键词搜索量查询
  • 网站一年维护费用多少站长之家网站介绍
  • 日照市住房和城乡建设局网站帮人推广注册app的平台
  • 网站开发名词解释中国新闻网
  • 做视频上传多少个网站安卓优化大师下载安装到手机
  • 怎么做外语网站免费网站在线客服软件
  • 出口贸易网站百度做网站需要多少钱
  • 免费一键生成名片seo做什么网站赚钱
  • 郑州微信网站建设石家庄网站建设
  • 做前端网站用什么软件写代码在线视频用什么网址
  • 网站建设公司推荐衡阳百度seo
  • 有关于网站建设类似的文章西安百度百科
  • 汕头澄海招聘网seo兼职工资一般多少
  • html企业整站模板网站如何自己开发软件app
  • 公司网站费用怎么做分录百度股市行情上证指数