2014-09-05 60 views
3

我正在对以下Java版本的单线程Java应用程序中使用的线程数:如何减少由JVM

java version "1.7.0_67" 
Java(TM) SE Runtime Environment (build 1.7.0_67-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode) 

启用了-XX:+UseSerialGC选项。仍然当我启动应用程序时,我看到多个线程在使用htop监视系统时开始。我想尽可能地减少启动的进程数,因为我有一个用例,它涉及运行这个应用程序的多个实例,并且这将在我运行的系统上达到最大允许进程数的顶点上。除了-XX:+UseSerialGC之外,是否还有其他的jvm选项可用于减少启动线程的数量?

+1

难道你不能在同一个JVM中运行多个实例,例如通过启动多个Java线程? //今天:根据您的应用程序,然后甚至可以用任务而不是线程等 – Thomas 2014-09-05 09:18:59

+0

这可能如果使用多个Java线程托马斯建议(HTTPS [A在工人队列为多线程Java应用程序减少争用和开销方法]帮你.java.net/article/2011/06/14/method-reducing-contention-and-overhead-worker-queues-multithreaded-java-applications) – Enumy 2014-09-05 09:20:12

+1

线程不是进程。你的问题建立在一种误解之上。 – EJP 2014-09-05 09:42:24

回答

8

除了-XX:+UseSerialGC它禁用并行或并发GC,有以下选项,以降低JVM的线程数:

  • -XX:CICompilerCount=1只留下一个JIT编译器线程。
  • -XX:+ReduceSignalUsage禁用信号发送器线程。例如。 JVM不会处理SIGQUIT来转储线程。
  • -XX:+DisableAttachMechanism防止AttachListener线程启动。

理论上可以禁用更多的线程(例如Service Thread和VM Periodic Task Thread),但这需要修补JVM。