Golang与Java比较

论坛 期权论坛     
选择匿名的用户   2021-5-23 02:02   26   0
<div class="entry" style="font-size: 16px;">
<div class="e3lan-post">
  <div>
   <span class="bt-uid-tg"></span>
  </div>
</div>
<p> 首先,我想声明一个免责声明。 我不是Go方面的专家。 几周前我开始研究它,因此这里的陈述是第一印象。 在本文的某些主观方面,我可能是错的。 也许以后我会写一些评论。 但是直到那时,如果您是Java程序员,这里就是欢迎您,看看我的感受和经验,同时,如果某些陈述中我有错,也欢迎您评论和纠正我。 <br><br></p>
<h2>Golang令人印象深刻</h2>
<p> 与Java相反,Go被编译为机器代码并直接执行。 与C非常相似。由于这不是VM机器,因此与Java有很大不同。 它是面向对象的,并且在某种程度上同时起作用,因此,它不仅是带有自动垃圾回收的新C语言。 如果我们认为编程语言的世界在一条直线上,那不是C和C &#43;&#43;之间的某个地方。 用Java程序员的眼光来看,有些事物有很大不同,以至于学习它们具有挑战性,并且可能使人们对编程语言结构以及对象,类和所有这些事物的方式有更深的了解……甚至在Java中。 </p>
<p> 我的意思是,如果您了解Go如何在OO中实现,那么您可能还会理解Java与众不同的一些原因。 </p>
<p> 简而言之,如果您不耐烦:不要让自己对这种看似奇怪的语言结构感到惊讶。 学习它,即使您没有要在Go中开发的项目,它也会增加您的知识和理解。 </p>
<h2>GC而非GC</h2>
<p> 内存管理是编程语言中的关键点。 汇编使您可以做所有事情。 或更确切地说,这需要您完成所有操作。 对于C语言,标准库中有一些支持功能,但是仍然需要您在调用<code>malloc</code>之前释放已分配的所有内存。 自动化内存管理始于C &#43;&#43;,Python,Swift和Java。 Golang也在此类别中。 </p>
<p> Python和Swift使用引用计数。 当存在对一个对象的引用时,该对象本身拥有一个计数器,该计数器对指向该对象的引用数进行计数。 没有向后的指针或引用,但是当新引用获取该值并开始引用一个对象时,计数器将增加,而当引用变为null / nil或引用另一个对象时,计数器将下降。 因此,当计数器为零时,就没有对该对象的引用,可以将其丢弃。 这种方法的问题在于,当计数器为正时,对象仍然可能无法到达。 可能存在对象圆相互引用,并且当该圆中的最后一个对象从静态,局部和其他可访问的引用中释放时,该圆开始像漂浮在水中的气泡一样漂浮在内存中:计数器均为正,但对象为无法到达。 Swift教程很好地解释了这种行为以及如何避免这种行为。 但是重点仍然存在:您必须在某种程度上关心内存管理。 </p>
<p> 如果是Java,则其他JVM语言(包括Python的JVM实现)由JVM管理。 有一个完整的垃圾收集,它不时在一个或多个线程中运行,与工作线程并行,或者有时停止那些(标记为停止运行)标记无法访问的对象,对其进行清除并压缩可能分散的内存。 您只需要担心性能。 </p>
<p> Golang也在这一类别中,有一个很小的,很小的例外。 它没有参考。 它具有指针。 差异至关重要。 它可以与外部C代码集成,并且出于性能原因,在运行时没有像引用注册表这样的功能。 执行系统不知道实际的指针。 仍可以分析分配的内存以收集可达性信息,并且仍可以标记和清除未使用的“对象”,但是无法四处移动内存以进行压缩。 从文档中看,这对我来说不是很明显,而且当我了解指针处理时,我正在寻找Golang向导实现压缩的魔力。 我很抱歉学习,他们根本没有。 没有魔术。 </p>
<p> Golang有一个垃圾回收器,但这不是Java中的完整GC,没有内存压缩。 不一定是坏事。 它可以很长时间地运行服务器,并且仍然不会使内存碎片化。 一些JVM垃圾收集器还跳过了压缩步骤,以减少清理旧版本时的GC暂停,并且仅作为最后的手段进行压缩。 Go中的最后一个步骤丢失了,在极少数情况下可能会引起一些问题。 学习语言时,您不太可能会遇到问题。 </p>
<h2>局部变量</h2>
<p> 局部变量(有时是新版本中的对象)以Java语言存储在堆栈中。 在C,C &#43;&#43;和其他实现了调用堆栈的语言中也是如此。 与本地变量相关的Golang也不例外,除了… </p>
<p> 除了可以简单地从函数返回指向局部变量的指针。 这是C语言中的一个致命错误。在Go语言中,编译器认识到分配的“对象”(我将在后面解释为什么使用引号)正在转义该方法,并相应地对
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP