{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

Net Core已经开源好几年了, 为什么不像JVM那样很多人研究和调优其GC算法?

ZweiZhaoZweiZhao 回答0 收藏1
收藏问题

10条回答

Charlie_Jade

Charlie_Jade

回答于2022-06-28 12:10

我们已经上线了好几个.net core的项目,基本上都是docker+.net core 2/3。说实话,

.net core的GC非常的优秀,基本上不需要像做Java时候,还要做很多的优化。因此没有多少人研究很正常。换句话,如果一个GC还要做很多优化,这肯定不是好的一个GC。当然平时编程的时候,常用的非托管的对象处理等等还是要必须掌握的。

评论0 赞同0
  •  加载中...
skinner

skinner

回答于2022-06-28 12:10

这和国内的开发环境有很大关系。

一方面,这里有个路径依赖的问题,这个问题在国内尤为突出。这几年,国内其他语言的开发者多一些,生态好一些,转换则意味着成本。

另一方面,浮躁之风过盛,拿来主义盛行。这里举两个例子来说明。一个是国产操作系统的内核问题。为什么要使用linux内核而不是重新写一个呢?给出的理由无非是linux生态好,稳定,没有必要进行重复制作。真的没必要吗?那国外为什么流行要用rust重新写几个,而且开源呢?“没必要”是假,“不想”才是真,毕竟基础建设周期长,成本高,没有拿来主义好呀。另一个例子是最近matlab在国内停止授权的事情。在这件事情上,很多人都觉得问题不大,问题不大的原因在于还有一个开源的scilab可以拿来用。

举这两个例子,也许不太妥切,但是,管中窥豹,略见一斑,也足以说明时下的浮躁氛围了。

既然这里说到net core底层问题,今年新出的《.NET Core底层入门》,也许值得一读。这是国内的研究者写的,从中可以看出国内在这方面的进展,也说不定。总而言之,虽然net core已经开源了几年,但是在国内,开发者的成长和生态的建设,还需要更长的时间。

评论0 赞同0
  •  加载中...
2450184176

2450184176

回答于2022-06-28 12:10

因为不需要,java就像半成品,无论是语法 编译器 等等,要是没有spring系列,估计那些996早就变成了007了。

评论0 赞同0
  •  加载中...
tianyu

tianyu

回答于2022-06-28 12:10

微软的产品化能力是有目共睹的,.net比起JAVA体系,更加完善,包括产品本身和后期的维护都比JAVA好,所以商业化项目最好还是用. net平台。

评论0 赞同0
  •  加载中...
chemzqm

chemzqm

回答于2022-06-28 12:10

这似乎挺正常的,如同它购买了GitHub后,众开源项目就纷纷迁移GH。开源社区普遍不信任微软,其意定非在开源本身。.Net 开源估计也是市场占有率在降,没人真心愿意用它。

评论0 赞同0
  •  加载中...
mgckid

mgckid

回答于2022-06-28 12:10

java生态太厉害了

评论0 赞同0
  •  加载中...
rickchen

rickchen

回答于2022-06-28 12:10

不只是netcore,golang,rust等等很多语言都没有好多人研究gc,所以这个问题应该问,为什么jvm会有很多人研究。

简单的回答是,jvm的历史负担太沉重,Java社区对jvm的改进十分的保守,新的特性必须要保持向下兼容,导致只能从gc入手优化性能。而netcore不一样,微软主导的netcore社区对clr的改进激进的多,新特性很多情况下是不会向下兼容的,性能优化可以在clr中解决掉,自然就不会过多关注gc了

评论0 赞同0
  •  加载中...
li21

li21

回答于2022-06-28 12:10

.net core,哪里还需要什么GC优化?那是jvm天生缺陷导致的问题。.net 5再性能上更进一步,只要你的程序不是写得稀烂,根本不用操心底层运行时的性能会出问题。

不能用jvm的眼光看.net,java界已经进入固步自封的状态,版本更新那么快,实质性的东西并没有什么突破。而很多公司坚守在java1.6上不放手,实在顽固。

评论0 赞同0
  •  加载中...
liaoyg8023

liaoyg8023

回答于2022-06-28 12:10

优化肯定是需要的,再好的程序都是有优化空间的。只是现在dotnet平台上目前缺少大型的应用。正常的业务场景下,难以达到框架性能的瓶颈。

dotnet 虽然开源了,但是开源太晚。要是早几年,在Android兴起之前,在大数据兴起之前,现在还会是这般场景吗。眼看着国内的大企业一波波地转向了Java和其他语言,作为一名dotnet程序员心里是大大的不甘心。

dotnet 在语言层面相比 Java 有太多优势,Java 新版新增的一些语言特性也都是照抄的 dotnet。但即便是这样,依然是叫好不叫座。

开源太晚,错过了几波行业发展红利。以至于现在,大数据领域缺 Hadoop,搜索领域缺 Elasticsearch ,移动端虽有xamarin,但依然是鸡肋般的存在。要是有这些杀手级应用在,dotnet 生态肯定会繁荣起来,向着更强的方向优化。

还能说什么呢,只能期望即将到来的dotnet 5 能一统现在混乱的局面,发挥好自己的特长,繁荣dotnet的生态环境。

评论0 赞同0
  •  加载中...
Lin_R

Lin_R

回答于2022-06-28 12:10

首先.net的原装GC一直都不错。流畅到可以支持3D游戏开发。所以不怎么需要调优。要知道文章多不用不一定是好事,95%的技术文章其实只不过是要解决一个BUG而已。其次C#的语法和运行时设计也好,对GC的压力小很多。比如范性支持基本类型,这样List<int>之类的结构,是整体分配和释放的。而某蛙就需要每个元素拆箱装箱。慢死,对GC来说也要算更多的引用链。此外C#还支持matrx4x4之类的SIMD数据类型。也是提高运行速度和减少GC的好东西

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<