{eval=Array;=+count(Array);}
我们已经上线了好几个.net core的项目,基本上都是docker+.net core 2/3。说实话,
.net core的GC非常的优秀,基本上不需要像做Java时候,还要做很多的优化。因此没有多少人研究很正常。换句话,如果一个GC还要做很多优化,这肯定不是好的一个GC。当然平时编程的时候,常用的非托管的对象处理等等还是要必须掌握的。
这和国内的开发环境有很大关系。
一方面,这里有个路径依赖的问题,这个问题在国内尤为突出。这几年,国内其他语言的开发者多一些,生态好一些,转换则意味着成本。
另一方面,浮躁之风过盛,拿来主义盛行。这里举两个例子来说明。一个是国产操作系统的内核问题。为什么要使用linux内核而不是重新写一个呢?给出的理由无非是linux生态好,稳定,没有必要进行重复制作。真的没必要吗?那国外为什么流行要用rust重新写几个,而且开源呢?“没必要”是假,“不想”才是真,毕竟基础建设周期长,成本高,没有拿来主义好呀。另一个例子是最近matlab在国内停止授权的事情。在这件事情上,很多人都觉得问题不大,问题不大的原因在于还有一个开源的scilab可以拿来用。
举这两个例子,也许不太妥切,但是,管中窥豹,略见一斑,也足以说明时下的浮躁氛围了。
既然这里说到net core底层问题,今年新出的《.NET Core底层入门》,也许值得一读。这是国内的研究者写的,从中可以看出国内在这方面的进展,也说不定。总而言之,虽然net core已经开源了几年,但是在国内,开发者的成长和生态的建设,还需要更长的时间。
微软的产品化能力是有目共睹的,.net比起JAVA体系,更加完善,包括产品本身和后期的维护都比JAVA好,所以商业化项目最好还是用. net平台。
这似乎挺正常的,如同它购买了GitHub后,众开源项目就纷纷迁移GH。开源社区普遍不信任微软,其意定非在开源本身。.Net 开源估计也是市场占有率在降,没人真心愿意用它。
不只是netcore,golang,rust等等很多语言都没有好多人研究gc,所以这个问题应该问,为什么jvm会有很多人研究。
简单的回答是,jvm的历史负担太沉重,Java社区对jvm的改进十分的保守,新的特性必须要保持向下兼容,导致只能从gc入手优化性能。而netcore不一样,微软主导的netcore社区对clr的改进激进的多,新特性很多情况下是不会向下兼容的,性能优化可以在clr中解决掉,自然就不会过多关注gc了
.net core,哪里还需要什么GC优化?那是jvm天生缺陷导致的问题。.net 5再性能上更进一步,只要你的程序不是写得稀烂,根本不用操心底层运行时的性能会出问题。
不能用jvm的眼光看.net,java界已经进入固步自封的状态,版本更新那么快,实质性的东西并没有什么突破。而很多公司坚守在java1.6上不放手,实在顽固。
优化肯定是需要的,再好的程序都是有优化空间的。只是现在dotnet平台上目前缺少大型的应用。正常的业务场景下,难以达到框架性能的瓶颈。
dotnet 虽然开源了,但是开源太晚。要是早几年,在Android兴起之前,在大数据兴起之前,现在还会是这般场景吗。眼看着国内的大企业一波波地转向了Java和其他语言,作为一名dotnet程序员心里是大大的不甘心。
dotnet 在语言层面相比 Java 有太多优势,Java 新版新增的一些语言特性也都是照抄的 dotnet。但即便是这样,依然是叫好不叫座。
开源太晚,错过了几波行业发展红利。以至于现在,大数据领域缺 Hadoop,搜索领域缺 Elasticsearch ,移动端虽有xamarin,但依然是鸡肋般的存在。要是有这些杀手级应用在,dotnet 生态肯定会繁荣起来,向着更强的方向优化。
还能说什么呢,只能期望即将到来的dotnet 5 能一统现在混乱的局面,发挥好自己的特长,繁荣dotnet的生态环境。
首先.net的原装GC一直都不错。流畅到可以支持3D游戏开发。所以不怎么需要调优。要知道文章多不用不一定是好事,95%的技术文章其实只不过是要解决一个BUG而已。其次C#的语法和运行时设计也好,对GC的压力小很多。比如范性支持基本类型,这样List<int>之类的结构,是整体分配和释放的。而某蛙就需要每个元素拆箱装箱。慢死,对GC来说也要算更多的引用链。此外C#还支持matrx4x4之类的SIMD数据类型。也是提高运行速度和减少GC的好东西
0
回答0
回答0
回答0
回答10
回答0
回答5
回答0
回答0
回答0
回答