@@ -5718,11 +5718,17 @@ // Unlike system(), this function can be called from signal handler. It // doesn't block SIGINT et al. int os::fork_and_exec(char* cmd) { const char * argv[4] = {"sh", "-c", cmd, NULL}; - pid_t pid = fork(); + pid_t pid ; + + if (OnOutOfMemoryError && OnOutOfMemoryError[0]) { + pid = vfork(); + } else { + pid = fork(); + } if (pid < 0) { // fork failed return -1;