Nel*_*son 33 java performance garbage-collection
我们有一个PHP webapp调用java二进制文件来生成pdf报告(使用jasperreport),java二进制文件输出pdf到标准输出并退出,然后php将pdf发送到浏览器.这个java命令持续大约3到6秒,我认为当它持续6秒时,因为GC启动,所以我想禁用它,因为无论如何当命令退出所有内存时返回..
我想知道如何为Java 1.4.2和Java 1.6.0禁用它,因为我们正在测试两个JVM以查看哪个执行速度更快..
谢谢
Pau*_*ett 36
这听起来像是在试图节省时间,但却以错误的方式进行.与启动和关闭java进程所花费的时间相比,禁用垃圾回收所节省的时间(对于单个任务而言)将是微不足道的.如果运行时性能是您的目标,您可能需要考虑进行Java进程启动,您可以多次请求执行所需的工作.
unb*_*eli 28
当JVM内存不足时,GC才会启动,因此无论是GC还是死机.尝试打开详细GC并查看它是否确实需要花费大量时间.
java -verbose:gc
Run Code Online (Sandbox Code Playgroud)
Cei*_*ish 28
没有办法完全禁用垃圾收集.垃圾收集仅在JVM空间不足时运行,因此您可以为程序提供更多内存.将这些命令行选项添加到Java命令
-Xmx256M -Xms256M
Run Code Online (Sandbox Code Playgroud)
这给程序256Mb的ram(默认为64Mb).但是,对于默认大小的JVM,垃圾收集不会花费3秒钟,因此您可能希望更密切地调查程序正在执行的操作.Yourkit profiler对于弄清楚需要花费很长时间的内容非常有用.
Java 11 为您提供了打开 Java GC 或关闭 Java GC 的二元选项。要关闭 Java GC,您可以使用 Epsilon 垃圾收集器,必须在命令行上关闭它。在 Java 11 上,使用以下两个 JVM 参数:
-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
Run Code Online (Sandbox Code Playgroud)
如果没有该UnlockExperimentalVMOptions参数,JVM 将无法启动,因此请确保包含该参数。
不幸的是,如果您不使用 Epsilon GC,则无法禁用、停止或阻止垃圾收集的发生。就像无法触发GC一样,你也无法停止Java GC。这些算法是不确定的。只有 JVM 可以控制它们何时发生。