zoukankan      html  css  js  c++  java
  • 垃圾回收

    • js垃圾回收是自动进行的
    • 如果对象是可达的,它一定是存在于内存中的
    • 一组相互连接的对象可能整体都不可达
     1 function marry(man,woman){
     2     woman.husband=man;
     3     man.wifr=woman;
     4      
     5     return {
     6     father:man,
     7     mother:woman
     8     }
     9 }
    10 
    11 let family=marry({
    12     name:"飞蓬"
    13 }, {
    14     name:"夕瑶"
    15 });

    marry:是一个函数变量,保存的是函数。

    family:是一个对象变量,用于保存对象。

    内存中有两个对象:给他们起个名字叫obj1和obj2。这两个对象中各有一个键值对,name:value;

    给obj2添加一个属性叫做husband,并用man这个对象来给其赋值。

    给obj1添加一个属性叫做wife,并用woman这个对象来给其赋值。

    先停下来看看现状:

    从obj1的角度:

    我本身就是一个对象,里头有一个属性叫做name:"飞蓬",现在又多了一个变量wife,这个wife指向我真正的老婆obj2。

    从obj2角度同理。

    从family角度:

    我本身是一个变量(对象变量),现在通过marry函数调用得到了该函数返回的一个对象。

    这两个对象在我这里叫做father和mather。

    对象就在那里,只是名字一直在变。

    一个对象,只有被引用时才会成为可达状态。

    对象内部互相引用,没有外部参与,不可达。

    垃圾回收的算法:

    1. 找到并标记所有的根
    2. 遍历并标记所有来自根的引用
    3. 遍历已经标记的对象并标记他们的引用。
    4. 直到所有的可达引用都被访问到
    5. 未被标记的对象会被删除

    优化垃圾回收的方法:

    分代收集:旧的和新的对象。

    增量收集:把回收工作分成几部分

    闲时收集:只在cpu空闲时回收

  • 相关阅读:
    牛客(28)数组中出现次数超过一半的数字
    牛客(27)字符串的排列
    2、Spring Cloud和dubbo简介
    1、微服务简介
    12、Spring Boot监控
    11、Spring Boot热部署
    10、Spring Boot分布式
    9、Spring Boot安全
    8、Spring Boot任务
    7、Spring Boot检索
  • 原文地址:https://www.cnblogs.com/flyover/p/14105720.html
Copyright © 2011-2022 走看看