回答
JVM的最大線程數通常在千位以內。如果您使用多個線程來優化計算算法,那麼您並不需要超過系統中運行的處理器數量。使用Runtime.getRuntime().availableProcessors()
查明。
如果線程被使用,這個數字是否更新? – 2011-05-07 22:27:16
它只會告訴你係統中有多少處理器,而不是剩下多少處理器。 – WhiteFang34 2011-05-07 22:29:52
有沒有這種情況,這是不正確的?在只有幾十個處理器的機器上運行數千個線程,你會在哪裏獲得更好的性能? – Nathan 2011-07-18 19:40:38
通過將visualvm附加到您的過程中,您可以看到有多少個線程。我推薦使用所有插件下載的版本1.3.2。
我還建議使用Spring及其執行程序池。這是配置線程池大小的好方法。
我建議你從一個稍微不同的角度的問題...
我的意思是,如果你問
"what's the maximum number of threads I can create and use for task x?"
和你問的是,因爲你認爲最螺紋用越好,你可以改爲問
"how many threads would I need to complete x most efficiently?"
其很例如,不太可能在任何雙核心機器上,數千個線程的性能會更好。例如,作爲一般的指導,對於CPU密集型任務(其中排序算法可能是),線程的最佳數量是
threads = number of CPUs + 1
看到How to find out the optimal amount of threads?
線程的實際最大數量取決於在OS上與JVM以及配置多少內存在JVM中使用。創建一個新線程需要一些操作系統內存,但不是Java堆內存。這意味着,如果您創建了數千個線程,則可能會耗盡內存,而使用-Xmx時無法啓動。實際上,您分配的Java堆內存越少,可用的本地內存就越多,因此可創建的線程越多。
請參閱this article以及評論以瞭解如何使用筆和紙製定最大值。儘管如此,如果要在應用程序中使用無限數量的線程,可以使用'Executors.newCachedThreadPool()',它將創建一個線程池,並根據需要創建多個線程。我不建議在日常使用中使用此類池,但它與您的原始問題有關。
希望有所幫助。
- 1. 如何查找CUDA中最大可用線程數?
- 2. 如何確定Tomcat中的最佳線程數?
- 3. 在CUDA中動態確定最大線程數?
- 4. 如何最終確定主線程?
- 5. 如何確定使用超線程多核CPU時的最佳Java線程數
- 6. 如何確定最佳線程堆棧大小?
- 7. 以編程方式確定UIView的最大可用幀大小
- 8. 如何確定模型可以處理的最大整數? 「
- 9. 最大併發線程數小於最大線程池大小
- 10. Solaris線程的最大數
- 11. 什麼是Asp.net中可用的最大線程數ThreadPool
- 12. 如何確定工作線程的最佳數量
- 13. 如何使用DTrace確定進程的最大內存使用
- 14. 如何確定線程UI線程
- 15. 池中的最大線程數
- 16. openMp中的最大線程數
- 17. 如何確定程序使用的最大內存?
- 18. 最大輸出的最佳線程數
- 19. 如何最大化CakePHP中自定義函數的可用性
- 20. 如何確定ARM處理器中使用的線程數。
- 21. 如何測量每秒最大可用在線用戶數量?
- 22. 線程池最大線程
- 23. 如何確定pid_t的最大值?
- 24. 如何確定3個整數的最大值和最小值
- 25. 如何限制perl中並行線程的最大數量
- 26. 如何限制Java中的最大線程數?
- 27. 如何配置並行中的最大線程數。For
- 28. 如何確定C++應用程序中可用RAM的數量?
- 29. 如何確定一組平行線中最外面的線?
- 30. 如何用Android確定最近的,最大的城市名稱?
你想用什麼線索'java.lang.Runtime'? – akf 2011-05-07 22:31:27