失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 计算机语言横向比较(三)

计算机语言横向比较(三)

时间:2019-11-09 15:57:04

相关推荐

计算机语言横向比较(三)

java因为有自动垃圾回收机制,无需手动释放内存,JRE会负责回收那些不再使用的内存,回收被无用对象占用的内存空间,使之再次被程序使用(一般是在CPU空闲或者内存不足时),java分代回收将不同生命周期的对象采用不同的收集方式,分代垃圾回收采用分而治之的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。

JDK 1.3之前的垃圾回收器,单线程回收,并且会有stop the world(STW),jdk1.5之后出现的CMS,标记阶段也会STW,从java8开始,JDK8 HotSpot JVM现在使用了本地内存来存储类元数据,元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间(MetaSpace)与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小.G1(Garbage-First)是在JDK 7u4版本之后发布的垃圾收集器,并在jdk9中成为默认垃圾收集器,适用于大内存多核心的服务器,且堆内碎片较多,需要控制GC时间。

CMS和G1以及许多垃圾回收策略可以减少STW的时间,但是在标记阶段还是会STW,这需要工程师在实践环境中做精细化调优。

Go语言作为新兴强势语言,其也继承和发展了java的垃圾回收机制,并使用了新的是三色标记,但是GC问题依旧会存在。

非GC语言的问题程序员都是熟知的,手动释放内存带来了内存泄漏的隐患,重复释放内存/生命周期控制bug等问题又带来了悬挂指针等问题,然而GC语言即使采用垃圾收集的内存管理策略,却引来其他问题,垃圾收集器解决了内存管理问题却带来了性能的负担,JVM的垃圾收集器设计精巧实现复杂,但实际使用中当我们的大吞吐量服务程序使用标准的垃圾收集器则一定会遇到Full GC停顿的问题,通常4GB的堆可能Full GC时间便会超过1s,如转而使用CMS垃圾收集器停顿时间减少但吞吐量也随之下降,Major GC耗时也经常要上百毫秒,并且长时间运行后还是可能会冷不防来一次Full GC耗上几秒,垃圾收集的性能负担使得采用垃圾收集的程序无法达到软实时的特性,Rust实现了一种新的内存管理方式,采用了 所有权、引用借用、生命期等一系列全新的概念来解决内存分配的问题,从语言层面解决内存管理,是很妙的一种方式。

如果觉得《计算机语言横向比较(三)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。