Java内存分配x系统调用

问题描述 投票:0回答:1

我一直在阅读程序如何与 SO 交互。

我了解到,每当程序想要在内存中创建对象/变量时,都应该将控制权传递给内核来执行此操作,使用系统调用、SO 内存管理,例如 jemalloc。

我还读到,当使用 new 在堆上创建变量或对象时,Java 不使用 mallac,甚至不进行系统调用。由于对象一直在创建,成本应该很高,所以 JVM 负责处理它。

我的问题是:

程序可以在不进行系统调用的情况下在堆上创建数据吗?直接创建对象到它的内存空间?

注意:我知道操作系统将虚拟内存映射到实际内存以保护数据等。

java memory-management linux-kernel
1个回答
0
投票

一旦应用程序从操作系统获取内存,即使不再使用它,它也会将其保留在空闲内存池中。如果出现新的内存分配请求,如果可能的话,该请求将从未使用的内存池中得到满足。

这就是 JVM 如何在内存中分配已经从操作系统获取但当前尚未使用的新对象。

非常笼统地说(忽略共享内存、内存压缩、虚拟内存...)对象使用的内存<= memory allocated to program <= memory available to OS

© www.soinside.com 2019 - 2024. All rights reserved.