对于某些背景, 据我所知,当我们启动一个java应用程序时,JVM为应用程序分配一个Heap空间和一个堆栈。该堆用于存储应用程序创建的所有对象。
我的问题是,如果我从我的java代码中调用Shell脚本,脚本使用的内存将从JVM堆空间分配,或者将使用系统内存空间。
答案 0 :(得分:1)
将使用系统内存。
Java将调用fork()
系统调用,该调用将复制父内存(当前正在使用的JVM内存)以便能够运行子项(您尝试运行的命令) 。
通常,在执行流程时,您必须先fork()
,然后exec()
。 Forking通过复制当前进程来创建子进程。然后,调用exec()
将“过程映像”更改为新的“过程映像”,基本上在子进程中执行不同的代码。这是您创建新进程以执行其他程序/脚本的方法。
请参阅: