首页 > 系统相关 >谈谈垃圾回收机制方式及内存管理。

谈谈垃圾回收机制方式及内存管理。

时间:2024-05-17 09:01:03浏览次数:18  
标签:垃圾 变量 fn1 回收 谈谈 引用 var 内存

回收机制方式

1、定义和用法:垃圾回收机制(GC:Garbage Collection),执行环境负责管理代码执行过程中使用的内存。

2、原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。

3、实例如下:

function fn1() {

    var obj = {name: 'hanzichi', age: 10};

}

function fn2() {

    var obj = {name:'hanzichi', age: 10};

   return obj;

}

var a = fn1();

var b = fn2();

fn1中定义的obj为局部变量,而当调用结束后,出了fn1的环境,那么该块内存会被js引擎中的垃圾回收器自动释放;在fn2被调用的过程中,返回的对象被全局变量b所指向,所以该块内存并不会被释放。

 4、垃圾回收策略:标记清除(较为常用)和引用计数。

标记清除:

  定义和用法:当变量进入环境时,将变量标记"进入环境",当变量离开环境时,标记为:"离开环境"。某一个时刻,垃圾回收器会过滤掉环境中的变量,以及被环境变量引用的变量,剩下的就是被视为准备回收的变量。

  到目前为止,IE、Firefox、Opera、Chrome、Safari的js实现使用的都是标记清除的垃圾回收策略或类似的策略,只不过垃圾收集的时间间隔互不相同。

引用计数:

  定义和用法:引用计数是跟踪记录每个值被引用的次数。

  基本原理:就是变量的引用次数,被引用一次则加1,当这个引用计数为0时,被视为准备回收的对象。

标签:垃圾,变量,fn1,回收,谈谈,引用,var,内存
From: https://www.cnblogs.com/Stars-125/p/18197112

相关文章

  • 一个Java基于阻塞的定时消费内存队列
     @Getter@AllArgsConstructorpublicenumInsertQueueEnum{A(30000,10,TimeUnit.SECONDS,2,1000),;privatefinalintcapacity;//队列长度privatefinalinttime;//最长阻塞时间privatefinalTimeUnittimeUnit;//最长阻塞时间单位privatefi......
  • 容器内存可观测性新视角:WorkingSet 与 PageCache 监控
    作者:行疾、尝君、佑祎、六滔容器工作内存WorkingSet 概念介绍在Kubernetes场景,容器内存实时使用量统计(PodMemory),由WorkingSet工作内存(缩写WSS)来表示。WorkingSet这个指标概念,是由cadvisor为容器场景定义的。工作内存WorkingSet也是Kubernetes的调度决策判断内......
  • RDLC降低使用内存
    在Winform使用RDLC时,在批量打印情况下,内存随着打印任务的数量逐渐增加。即便手动GC效果也不明显。原因:localReport在创建时,每个实例都是一个应用程序域。租约的过期时间比较久,按照网上的资料,过期时间大约10分钟左右。这就导致即便打印完了,内存也不会很快下降。解决办法:1.手......
  • buffer/cach太高导致k8s无法新建pod分配内存
    1.使用hcache查看buff/cache占用情况执行下面的命令安装hcache,原hcache项目地址https://github.com/silenceshell/hcachewgethttps://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcachechmod+xhcachemvhcache/usr/local/bin/查看缓存排名前十的进程hc......
  • 弃用MHz!微软Windows 11内存性能指标切换到 MT/s
    微软近日面向Beta频道的WindowsInsider项目成员发布了Windows11系统的KB5037008更新。本次更新引入了一项重要的性能指标变化:将任务管理器中的内存性能指标从MHz(兆赫)切换到MT/s(每秒兆传输数)。计算机内存的数据传输速度一直以MHz为单位,MHz代表内存模块每秒可以执行多少百万个......
  • msvc 获取c++类内存布局 /d1 reportAllClassLayout
     visualstudio配置获取所有类内存布局/d1reportAllClassLayout或者指定类/d1reportSingleClassLayoutXXXclass  编译时输出:     ps:https://www.openrce.org/articles/full_view/23   【原文地址】https://blog.csdn.net/qq_29542611/article......
  • JVM非运行时共享内存之直接内存
    直接内存(DirectMemory)并不是虚拟机运行时数据区的一部分。为何存在呢?观察下两图进行对比:有没有似曾相识?!很多架构的设计都基于这种思想,提高性能和效率。NIO的Buffer提供一个可以直接访问系统物......
  • python列出centos7内存使用前50的进程信息
    python代码,列出centos7系统内存使用排名前50的进程信息,按照内存使用大小从大到小排序。 importpsutil#获取系统内存信息total_memory=psutil.virtual_memory().total/(1024.0**3)#转换为GBavailable_memory=psutil.virtual_memory().available/......
  • 谈谈 JVM 垃圾回收机制
    前言垃圾回收需要思考三件事情,哪些内存需要回收?什么时候回收?如何回收?一、哪些内存需要回收JVM的内存区域中,程序计数器、虚拟机栈和本地方法栈的生命周期是随线程而生,随线程而灭的。这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收问题,当方法或线程结束时,内存自......
  • .NET 缓存:内存缓存 IMemoryCache、分布式缓存 IDistributedCache(Redis)
    .NET缓存里分了几类,主要学习内存缓存、分布式缓存一、内存缓存IMemoryCache#1、Program注入缓存builder.Services.AddMemoryCache();2、相关方法及参数Get、TryGetValue、GetOrCreate、GetOrCreateAsync、Set、Remove,关键参数是过期时间,GetOrCreate、GetOrCreateAsync是通......