我们有一个PHP webapp,它调用一个java二进制文件来生成pdf报告(带有jasperreport),java二进制outpus pdf到标准输出和退出,然后将php发送到浏览器。这个java命令持续大约3到6秒,我认为当它持续6秒时,这是因为GC启动了,所以我想禁用它,因为无论如何当命令退出所有内存时都会返回。如何禁用Java垃圾收集器?
我想知道如何禁用它为Java 1.4.2和Java 1.6.0,因为我们目前正在测试两个JVM,看看哪些执行得更快..
感谢
我们有一个PHP webapp,它调用一个java二进制文件来生成pdf报告(带有jasperreport),java二进制outpus pdf到标准输出和退出,然后将php发送到浏览器。这个java命令持续大约3到6秒,我认为当它持续6秒时,这是因为GC启动了,所以我想禁用它,因为无论如何当命令退出所有内存时都会返回。如何禁用Java垃圾收集器?
我想知道如何禁用它为Java 1.4.2和Java 1.6.0,因为我们目前正在测试两个JVM,看看哪些执行得更快..
感谢
没有办法完全禁用垃圾收集。垃圾收集只在JVM空间不足时运行,因此您可以为程序提供更多内存。添加这些命令行选项Java命令
-Xmx256M -Xms256M
这给RAM的程序的256Mb(默认为64MB)。垃圾收集对于默认大小的JVM不会花费3秒,因此您可能想要更仔细地调查程序正在执行的操作。 Yourkit profiler对于弄清楚需要很长时间的事情非常有用。
您确定它是垃圾回收导致放缓吗?你用-verbose:gc运行java来看看发生了什么?
您无法禁用JVM上的垃圾回收。但是,您可以查看tuning垃圾收集器以获得更好的性能。
您可以使用-Xmx
选项设置最大堆大小;使用更大的堆应该防止虚拟机运行内存不足,从而需要尽快进行垃圾收集。
只需设置-Xmx就不会有任何区别。您实际上也需要设置-Xms,因为您要控制初始堆大小。 – 2010-05-28 08:14:00
听起来好像你正在努力节省时间,但是却以错误的方式前进。与启动和关闭java进程所用的时间相比,禁用垃圾回收所节省的时间将是微不足道的(对于单个任务)。如果运行时间性能是您的目标,您可能需要考虑进行java进程启动,您可以多次提问以执行所需的工作。
好的一个......我想,它也可以节省碧玉的初始化。 – helios 2010-05-28 08:15:20
是的,这是一个很好的方法,虽然需要做更多的工作,但我必须编写一种守护进程来监听套接字,等等......除了这个“守护进程”之外,还必须在X天内重新启动一次。 (从我的经验)泄漏内存.. – Nelson 2010-05-28 08:20:55
@Nelson考虑看看您是否可以使用像Mule这样的东西来托管您的Java进程并让它为您处理所有通信。这个想法就是你只需要将你的JasperReports作为一种服务嵌入,ESB可以根据需要将这些请求托管和路由。 Mule:http://www.mulesoft.com/mule-esb-open-source-esb – 2010-05-28 08:28:31
正如大家所说的,你不能在JVM中禁用GC,这是合理的,因为如果你能够存在内存泄漏,由于Java没有明确的方式让开发人员删除堆数据。
您有权访问此java二进制文件的源代码吗?如果是这样,可能值得分析它,看看是否有任何瓶颈可以更好地写出来减少GC活动。这可以使用大多数Java分析器完成,例如JProbe。
java二进制非常简单,它只是检索命令行参数并调用jasperreport函数来创建报告,该报告传递给System.out outputstream,PHP通过“passthrough”函数读取它。 所以花时间在Jasperreport上完成报告,多数民众赞成我如何想java普遍加速。 – Nelson 2010-05-28 08:28:40
看起来像控制JVM GC设置是您的唯一途径。 – display101 2010-05-28 08:39:50
为了避免垃圾回收器释放任何对象的变量或属性, 您必须将此属性(由gc发布)设置为静态类 这是我的解决方案。
示例:
private static String myProperty;
只是暗示其他方法(因为流程启动也需要时间):http://github。com/hudora/pyJasper包含一个(java)服务器,它可以根据请求运行jasperreports,而不需要启动/关闭进程。 – ZeissS 2010-05-28 08:16:44
相关的具体对象:http://stackoverflow.com/questions/1329926/how-to-prevent-an-object-from-getting-garbage-collected – 2015-03-04 08:08:24