栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

关于内存,Java Runtime.exec()从哪个Linux内核/ libc版本安全?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于内存,Java Runtime.exec()从哪个Linux内核/ libc版本安全?

这是* nix(和linux)自从时间曙光(或mmus黎明)以来一直工作的方式。

要在*
nixes上创建新进程,请调用fork()。fork()使用其所有内存映射,文件描述符等创建调用过程的副本。内存映射是写时复制的,因此(在最佳情况下)实际上不会复制任何内存,而仅复制这些映射。接下来的exec()调用将当前的内存映射替换为新的可执行文件的映射。因此,fork()/
exec()是创建新进程的方式,而这正是JVM使用的方式。

需要注意的是,繁忙的系统上存在大量进程,父级可能会继续运行一会儿,然后子级exec()会导致大量内存被复制,从而导致写时复制。在VM中,内存可以移动很多,以方便垃圾收集器产生更多的副本。

“解决方法”是做您已经做的事情,创建一个外部轻量级进程来处理产生新进程的过程,或者使用比fork /
exec更轻量级的方法来产生进程(而linux没有,并且无论如何都会这样做)需要更改jvm本身)。Posix指定posix_spawn()函数,从理论上讲,可以在不复制调用进程的内存映射的情况下实现posix_spawn()函数-
但在Linux上不是这样。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400090.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号