- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的理解是,用 Go 编写的应用程序的可执行文件可以独立运行,而不需要在机器上安装 Go。
通常我的理解是 GC(垃圾收集)由 VM 处理。在这种情况下,如果应用程序在没有这样的运行时的情况下独立运行,GC 将如何处理?
关于此的帮助和相同的文档会很好。
最佳答案
my understanding is that the GC (Garbage Collection) is handled by a VM.
以支持编程语言的典型VM为例以 GC 为特色,(编译形式)一个程序语言实际上是由 VM 管理的:VM 运行程序代码并定期进行干预以执行 GC 任务。
关键是每个程序运行在这样的VM中可以将其 VM 视为其执行环境的一部分。
还有一个很关键的地方就是这样的VM代表了所谓的 runtime system对于该编程语言的所谓执行模型。
In this case, if the application is running independently without such a runtime how is GC handled?
与 VM 案例非常相似。
由库存工具链编译的每个 Go 程序(可以从 the official site 下载)包含与程序本身链接的 Go 运行时。每个编译后的 Go 程序的创建方式是,当程序运行时,程序的入口点首先执行运行时它负责初始化自身,然后是程序,一旦完成,执行将转移到程序的 main()
。
除此之外,不断初始化的 Go 运行时运行一段或多段自己的代码,其中包括goroutine 调度程序和 GC(它们在 FWIW 中紧密耦合)。
如你所见,与VM的不同之处在于,在那种情况下运行时是运行程序的“外部”,而在Go 程序的(典型)情况是“沿着”正在运行的程序。
Go 语言规范中没有任何内容要求必须使运行时可用的精确方式运行程序。
例如,Go 1.11 可以编译成 WASM ,并且运行时是部分由 Go 运行时的链接代码提供部分——由 WASM 主机(通常是浏览器)。
再举一个例子,GCC具有 Go 前端,与“股票”相反Go toolchan,在可能的平台上,GCC 支持以编译形式的方式构建 Go动态 链接到一个包含大多数内容的共享库Go 运行时代码(和标准库的代码)。在这种情况下,编译后的 Go 程序不包含运行时代码,但它在加载程序时被链接然后它也与程序本身一起工作。
完全有可能为将使用 VM 的 Go 程序。
关于go - GC 如何在没有单独的运行时或 VM 的情况下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611145/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
我是 Azure 平台的初学者。我在公司的 Azure 基础架构中遇到了虚拟机问题,在我从操作系统重新启动后,该虚拟机无法启动,我尝试了所有其他故障排除功能,但仍遇到以下问题: 重新部署选项。 我想确
我在 Mac 上使用 XAMPP-VM,我尝试使用 xampp 管理器上显示的地址通过 ssh 连接到 VM: 192.168.65.2 我意识到我不知道 VM 的 root 密码和任何 ssh-ke
我知道你可以在 Dalvik 的 VM 中运行几乎所有的 Java,而你可以在 Java 的 VM 中运行,但是限制不是很清楚。有没有人遇到任何主要的绊脚石?有什么大图书馆有问题吗?任何编译成 Jav
Azure VM 备份失败,出现错误 - GuestAgentSnapshotTaskStatusErrorAzure 备份服务无法与 VM 代理通信以触发快照(以进行备份),因为 VM 代理可能处于
我想知道当虚拟机停止时,虚拟机的软件成本部分是否收费。我想运行 Azure SQL VM Enterprise。 VM 每月的软件成本为“1,116 美元/月”。 如果我停止使用,我仍需支付该软件的费
有 2 台安装了 Proxmox (Proxmox-ve 4.2) 的物理服务器,每台都处理几个虚拟机和容器。这些服务器(几乎)完全隔离,它们之间没有集群/共享存储/附加存储等。 已在 proxmox
我想知道当虚拟机停止时,虚拟机的软件成本部分是否收费。我想运行 Azure SQL VM Enterprise。 VM 每月的软件成本为“1,116 美元/月”。 如果我停止使用,我仍需支付该软件的费
有 2 台安装了 Proxmox (Proxmox-ve 4.2) 的物理服务器,每台都处理几个虚拟机和容器。这些服务器(几乎)完全隔离,它们之间没有集群/共享存储/附加存储等。 已在 proxmox
Parrot Virtual Machine 有什么好处?对于最终用户(软件开发人员)? 例如,如果我可以直接针对 Perl 或 Python 进行编程,我为什么还要在 Parrot 下为它们编程呢?
例如,Python 和 Java 有一个 VM,而 C 和 Haskell 没有。 (如果我错了,请纠正我) 想了想线路两边都有哪些语言,找不到原因。 Java 在很多方面都是静态的,而 Haskel
我知道虚拟机镜像有两种类型:通用型和专用型。 如果操作系统已通用化/取消配置,则必须关闭虚拟机才能将其捕获为 VM 镜像。一旦 VM 被捕获为 VM 镜像,该虚拟机将自动删除。 如果操作系统是专用,则
我知道虚拟机镜像有两种类型:通用型和专用型。 如果操作系统已通用化/取消配置,则必须关闭虚拟机才能将其捕获为 VM 镜像。一旦 VM 被捕获为 VM 镜像,该虚拟机将自动删除。 如果操作系统是专用,则
背景信息 我正在开发一种支持网络的嵌入式设备,旨在与服务器进行通信。因为此服务器将运行 Linux(但我需要 Windows 工具进行开发),我正在运行带有 Ubuntu Server 14.04 的
我有一个 Azure 云服务 mywebapp.cloudapp.net,它由两个 Azure VM - mywebappvm1 和 mywebappvm2 组成。两个虚拟机位于同一可用性集中并具有相
有什么方法可以在不重新启动虚拟机的情况下调整现有虚拟机的大小,还是总是像停止虚拟机然后重新启动一样? 据我了解,我可以更改虚拟机的大小而无需重新启动它。请指导我,因为我不希望虚拟机在调整大小时出现任何
我是 Azure 新手。我正在尝试使用 powershell 在 Azure 中创建资源。 我的要求是从虚拟机创建镜像。我遵循了以下方法: 流程 1:手动执行 通用化虚拟机:登录虚拟机 -> 打开命令
我创建了虚拟网络,并且想要将新虚拟机部署到该虚拟网络。网络 我尝试使用以下命令创建虚拟机: az vm create --resource-group myGroup --name VMTestNet
上下文 作为一个大学项目,我们希望更改 pharo 虚拟机以使用对象表,看看会发生什么。 我们使用pharo-vm clone from github和VMMaker。构建虚拟机工作正常。 首先,我们
我是巴拿马型的新手,刚刚安装,但收到以下错误消息: A different VM with name panamax-vm has been created already. 我试图通过使用 pana
我是一名优秀的程序员,十分优秀!