Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在应用程序启动之间将JVM保留在内存中?_Java_Performance_Jvm - Fatal编程技术网

Java 是否可以在应用程序启动之间将JVM保留在内存中?

Java 是否可以在应用程序启动之间将JVM保留在内存中?,java,performance,jvm,Java,Performance,Jvm,: 只运行很短时间的小型实用程序应用程序可能会受到影响 如果JVM和Java应用程序启动时间长,则会影响性能 我想知道是否有可能在应用程序启动之间将JVM(而不是其“状态”)保留在内存中,以避免启动延迟 编辑我认为投票结束这个问题的两个人甚至没有读过。JVM和JVM状态是两个不同的东西。我问过如何将JVM保存在内存中,而不是像另一个问题一样将JVM状态保存到文件中。前者的目标是节省启动时间。后者根本不能做到这一点。这取决于您希望如何使用JVM。如果上一个JVM作业完成,并且不需要任何数据,则可以

:

只运行很短时间的小型实用程序应用程序可能会受到影响 如果JVM和Java应用程序启动时间长,则会影响性能

我想知道是否有可能在应用程序启动之间将JVM(而不是其“状态”)保留在内存中,以避免启动延迟


编辑我认为投票结束这个问题的两个人甚至没有读过。JVM和JVM状态是两个不同的东西。我问过如何将JVM保存在内存中,而不是像另一个问题一样将JVM状态保存到文件中。前者的目标是节省启动时间。后者根本不能做到这一点。

这取决于您希望如何使用JVM。如果上一个JVM作业完成,并且不需要任何数据,则可以为下一个或未来的作业重用JVM。这已经部署在大数据应用程序中,以缩短JVM启动延迟(例如Hadoop或Spark),您可以参考以了解更多信息。

注意,引用的句子只是一个条件句(中间有一个“if”),省略了技术术语,基本上说:

…如果…启动时间过长,仅运行很短的时间可能会受到影响

显然,这句话是如此的基本(真实但琐碎),以至于你可以把它应用到任何事情上,包括你的汽车或电视。回到打开电视意味着加热电视的时代,短时间看电视可能会受到长时间启动的影响

这份声明绝不会说存在这样的问题。因此,通过询问“是否有可能将JVM保留在内存中”,您不仅得出了存在这样一个问题的错误结论,而且暗示了这个问题(如果存在)是由JVM没有保留在内存中引起的,而不支持这个假设

“JVM”由几个组件组成。本机代码通常作为本机共享库交付,由操作系统加载并保存在内存中。JRE的类存储在内存映射的内存中,因此,如果操作系统确定有足够的未使用内存,则在JVM实例之间共享,并保存在内存中,类似于组成JVM的本机库

其他资源和应用程序的代码是使用常规I/O读入的,但操作系统层将利用未使用的内存进行缓冲。与内存映射库和共享类数据的区别在于,从已缓存的文件中读取数据时,需要执行必要的复制步骤。但是,当然,这仍然比实际从硬盘读取快

总而言之,“将JVM保留在内存中”已经是事实,对于那些可以保留和重用的部分,改进潜力很低。您可以通过在新启动的计算机上启动一个小应用程序(例如hello world)来轻松验证它,然后使用相同的JVM再次运行相同的应用程序,您将在第二次运行时注意到启动时间显著缩短


您可能会认为第二次运行的启动时间与使用Hello World(例如脚本语言)相比仍然很高,但这不是保存或不保存JVM组件在内存中的问题。它也是高度主观的,启动时间考虑足够长,以考虑它遭受的应用。

这不是“java文档”,而是JRoKIT的文档,一个特定的JVM实现,这不是你可以下载的。那么…您注意到语句中的“如果”了吗?即使您将JVM保存在内存中,它也没有用,因为它的状态已被应用程序更改。HotSpot已经进行了大量优化,可以快速进入第一次启动时保存到磁盘的初始状态。这可能很有趣:我刚刚测量了完全执行
System.out.println(“你好,世界!”)的时间程序,它是90毫秒。@MarkoTopolnik它是正确的,但例如Lua“hello world”花费的时间减少了约100倍。这对于一种应用程序来说是非常特定的。OP似乎在问一个更一般的问题。