我正在做一个使用Apache Ant
的学校项目。在我的项目中,我正在执行web请求。
查看我的build.xml
文件中的特定目标:
<target name="daemon" depends="build.all">
<java
classpathref="run.path.id"
classname="xxx.xxx.Daemon"
fork="false">
</java>
</target>
如果我运行这个目标,所有web请求大约需要30秒(每个)来完成。如果我将fork
属性更改为:
<target name="daemon" depends="build.all">
<java
classpathref="run.path.id"
classname="xxx.xxx.Daemon"
fork="true">
</java>
</target>
请求几乎立即完成(不到一秒)。
来自https://ant.apache.org/manual/Tasks/java.html关于fork
属性:
如果启用,则在另一个VM中触发类执行(默认禁用)
为什么这会对web请求的性能产生如此巨大的影响?
更新:
此问题仅在Windows上存在。我测试了两台运行Windows的机器。两者都表现出这种行为。然后,我在每个虚拟机上启动一个虚拟机(运行Ubuntu),无论fork
属性的值如何,守护进程目标都能完美运行。
如果您运行java
命令,这将创建一个自己的进程,该进程将在同一JVM中的单独线程中运行。因此,虽然进程是从运行Ant
的线程创建的,但它不会立即运行。