1

对于一些背景知识,据我所知,当我们启动一个 java 应用程序时,JVM 会为应用程序分配一个堆空间和一个堆栈。该堆用于存储应用程序创建的所有对象。

我的问题是,如果我从我的 java 代码中调用 Shell 脚本,脚本使用的内存是从 JVM 堆空间分配还是使用系统内存空间。

4

1 回答 1

1

将使用系统内存

Java 将调用一个fork() 系统调用,该系统调用将复制父内存(当前正在使用的 JVM 内存)以便能够运行子内存(您尝试运行的命令)。

一般来说,当你执行一个进程时,你必须先fork(),然后exec()。分叉通过复制当前进程来创建一个子进程。然后,您调用exec()将“进程映像”更改为新的“进程映像”,实质上是在子进程中执行不同的代码。这就是您创建新进程以执行其他程序/脚本的方式。

看:

  1. 分叉 JVM
  2. 来自 Java 的 Shell 进程和臭名昭著的 OutOfMemory
于 2012-12-17T23:48:45.123 回答