2014-09-05 80 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。