夏虫不可语冰

此次事件让我再次体会到了什么是“夏虫不可语冰”。博客园有些人压根没看完你的文章,带着已有认知断章取义不暇思索上来就是喷。不过,以前也遇到过,现在也慢慢习惯了。

对于托管堆内存泄漏的说法,不管认不认同,我还是希望我的粉丝们能知道有这么个定义,有这么一回事。相信你们以后在阅读文章或与人交流的时候,还会看到或听到有人管这种现象叫内存泄漏,届时也不至于蒙圈。虽然这是个很小的知识点。

C#中的匿名函数是头等对象,可以作为变量使用,也可以作为参数传递。Task.Run 中使用匿名函数作为参数就是一个典型的应用场景。如果匿名函数捕获了所在类的成员,对外部调用者来说,这个类的实例什么时候被释放是无法预知的(除非你十分清楚这个类的内部实现),但你知道它最终是会被回收的。有人把这种可能导致对象延迟回收的现象定义为内存泄漏,也有很多人不认为是内存泄漏。这是定义问题,如果你能用一个词来更好地定义这种现象也是可以接受的。

Many share the opinion that managed memory leaks are not memory leaks at all since they are still referenced and theoretically can be de-allocated. It’s a matter of definition and my point of view is that they are indeed memory leaks. They hold memory that can’t be allocated for another instance and will eventually cause an out-of-memory exception.

Ref: dwz.date/d48U

很早之前我就看过类似的文章,把匿名方法捕获类成员导致延迟回收的现象定义为内存泄漏。上面引用的这篇是最近阅读到的一篇,这位外国作者写了很多 .NET 内存管理相关的文章,都值得一读。

如果只站在操作系统的角度看内存是否被掌控来定义内存泄漏,.NET 托管堆几乎就没有不被掌控的内存占用(托管堆之所以叫“托管”就是 CRL 会自动管理)。而之所以有人定义了托管内存泄漏,是因为对 CLR 来说,在局部视角不再需要使用的对象依然被其它实例引用,可能导致 GC 恰巧在搜索 Root 的时候不能把这个对象所占内存分配给其它实例。对于 CLR 来说,它对托管对象有全权“托管”之责。如果在被引用期间,恰巧 GC 在搜索 Root,就会导致 GC 错过了一次回收该对象的机会,此次任务就“失职”了,只能在下一次搜索时回收它。但如果使用了本地(局部)变量,就可以避免这种情况。

大部分场景,我们并不需要在意这一点性能,何况这是个概率很低的事件。但是它值得引起注意,哪怕只有万分之一的概率。在一些特别的场景下(比如高并发),遇到这个问题我们需要知道使用本地变量来优化我们的程序。

这个现象是不是内存泄漏,只是个定义问题,如果觉得这个定义不妥,可以不认同这个定义。正如 @楚人Le 说的,你也可以把它定义为“空间泄漏”:

我倾向于认为这属于内存泄漏。Wikipedia上关于Memory leak有这样一句话:“A space leak occurs when a computer program uses more memory than necessary. In contrast to memory leaks, where the leaked memory is never released, the memory consumed by a space leak is released, but later than expected”。如果我们非常较真的话,或许可以使用“空间泄露”这个词。当计算机程序使用超过所需的内存时,就会发生空间泄漏。与内存泄漏相比,空间泄漏所消耗的内存会被释放,但会比预期的要晚。

这只是个定义,这只是个定义,这只是个定义。不必纠结,更没必要因为不认同就恶语相向。

今天的文章夹杂着一点情绪,请大家见谅。要说一点都不在意那些评论,那肯定是假的,心中多少还是会有些不愉悦的。面对网络喷子,如果内心不够强大,还真是不敢随便发表文章。这次也让我意识到,以后有争议性的文章少写,大家也是一样。

自媒体很多大V都经历过这种时段,和他们相比我这个虾兵小卒遇到的这么三两次不算什么。正如一线码农大佬说的,有忠粉就有黑粉。既然走上这条路,必然也要经历这些,这便是成长。

每每遇到这种事情,就特别想和铁粉们说声:感谢!感谢你们一路以来的陪伴、理解、支持和鼓励,感谢你们愿意和我一起学习和成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之数据预处理——归一化,标准化

机器学习之数据预处理——归一化,标准化 基础知识1.什么是特征预处理2.预处理方法 :3.预处理API:数据的标准化(normalization)和归一化数据的标准化数据归一化1 把数变为(0,1)之间的小数2 把有量纲表达式变为无量纲表达式常用归一化方法最大-最小标准化(MinMaxScaler)Z-s…

css less 不要作用到子对象_使用Less实现网站主题切换

v-easy-components change theme很多初学前端的开发同学一定有一种想法,就是如何更改网站的主题。前年(2018),我也陷入了思考,如何切换网站主题呢?当时不知道less,只想到一种办法,就…

展望2021,Java、Go、.NET,谁主沉浮?

伴随着年底.NET社区活动,近日跟几位微软MVP大佬聊天请益,收获颇丰。程序员都有个话题避不开,就是各编程语言的优劣,大佬们的见识既有意思也有深度,这里为大家整理一下,其中Java、Golang和.NET是讨论焦点。J…

机器学习之数据集划分——训练集测试集划分,划分函数,估计器的使用

训练集测试集划分,划分函数,估计器的使用参考文章训练集、验证集和测试集的划分及交叉验证的讲解划分训练集和测试集的函数学习sklearn数据集,数据集划分,估计器详细讲解参考文章 训练集、验证集和测试集的划分及交叉验证的讲解 …

labuladong 的算法小抄_关于算法笔试的几个套路,一点就透

以下文章来源于labuladong ,作者labuladong我知道各位是被标题吸引进来的,那就不废话,先说几个算法笔试的硬核套路,再说说语言选择和做题复习的策略。避实就虚大家也知道,大部分笔试题目都需要你自己来处理输入数据&am…

TVP两周年:携手同行,让未来可见

TVP两周年2018年12月15日,在北京的腾讯云社区开发者大会上,作为腾讯云构建开发者生态的重要战略,TVP计划正式发布。2020年12月15日,不知不觉,腾讯云TVP已经走过了两度春秋。从0到1的探索,1到10的成长&#…

机器学习日常练习——红楼梦作者分析(聚类)

红楼梦作者分析(聚类) 实验要求实验题目:《红楼梦》作者分析实验目的实验内容资料下载实验过程:问题分析:解决思路:代码:代码一:出现的问题文件编码问题将红楼梦数据,按照章节进行划分(使用到了正则表达式)数据进行标准化处理(最大最小标准化)使用了两种聚类方法(均…

加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!

Hutool 谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 “…

Oh my God, Swagger API文档竟然可以这样写?

最好的总会在不经意间出现。“作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率。为避免联调时来回撕逼,今天我们聊一聊正确编写Swaager API文档的姿势。基础Swagger用法在ConfigureServices配…

机器学习之格式变化——reshape(-1,1)

格式变化——reshape函数 知识基础代码知识基础 reshape(行数,列数)常用来更改数据的行列数目 一般可用于numpy的array和ndarray, pandas的dataframe和series(series需要先用series.values把对象转化成ndarray结构) 那么问题来了reshape(-1,1)是什么意思呢?难道有-1行? 这…

vue 前端设置允许跨域_web 前端的一些小问题

关于vue使用axios post发送json数据跨域请求403的解决方法:1. 问题vue开发的时候,使用axios跨域发送请求,同时post发送的数据格式是json格式,发送出去的时候发现控制台报错403,返回的信息提示是跨域的问题,…

如何在 Windows 10 上安装 WSL 2

翻译自 Joey Sneddon 2020年10月30日的文章《How to Install WSL 2 on Windows 10》 [1]如果您想在最新的 Windows 版本中尝试经过改进的 Windows 子系统 Linux 2 (即 WSL 2) [2],要怎么做呢?我们在本文中介绍了安装它所需要做的所有事情。WSL 2 是微软早…

机器学习之超参数调优——超参数调优的方法

超参数调优的方法概述网格搜索随机搜索贝叶斯优化算法概述 对于很多算法工程师来说, 超参数调优是件非常头疼的事。除了根据经验设定所谓的“合 理值”之外, 一般很难找到合理的方法去寻找超参数的最优取值。 而与此同时,超参数对于模型效果…

lnmp无法远程连接mysql_MySQL(一):设置root 可以远程连接MySQL

在mysql在远程主机或虚拟机上时,远程连接mysql数据库一般都使用GUI工具,比如Mac下的Sequel Pro;win和linux下的Sqlyog; 还有大名鼎鼎的Navicat。有人也许会说命令行多好,对着黑黑的屏幕噼里啪啦的一顿敲,屏…

机器学习之模型——保存与加载

机器学习之模型——保存与加载 知识点fit()transform()fit_transform()目的API流程获取数据划分数据集标准化预估器保存模型加载模型得出模型模型评估整体代码知识点 fit() Method calculates the parameters μ and σ and saves them as internal objects. 解释:简单来说,…

GraphQL:打造自己的Directive库

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进&#xff0c…

云付认证已通过可以支付吗_海科融通丨刷新支付日常问题【附交易操作步奏】...

01常见问题汇总QPIN秘钥检验出错A:认证时不要频繁点击,点完后等一等系统反应,可联系客服处理。Q报错99,该小商户已入网A:提供商户编号给服务经理处理。Q终端屏幕无法签字A:待机界面,输入#0#&…

机器学习案例——生态系统蒸散速率预测

生态系统蒸散速率预测 问题背景概述数据集、代码、报告下载实验步骤分析一、数据预处理1、 对生态观测数据表和植被数据表进行数据预处理2、将不同站点的多个表进行纵向合并3、进行质量控制及去除异常值二、筛选特征1、画相关性热力图(使用热力图进行相关性分析)2、进行特征选择…

邀请函|WorkShop报名通道开启,来就送礼!

作为互联网行业的年度盛会今年除延续以往的开幕与论坛技术分享外还增设了Work Shop 体验课程!参加此次工作坊不仅能近距离和大佬进行互动体验项目开发的快感还能领取大会纪念卫衣、书籍等惊喜好礼是不是很期待?(数量有限先到场先得&#xff0…

对象数组参数_【JavaScript 教程】标准库—Array 对象

作者 | 阮一峰1、构造函数Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。var arr new Array(2);arr.length // 2arr // [ empty x 2 ]上面代码中,Array构造函数的参数2,表示生成一个两个成员的数组…