我有幾個問題,我在網上搜索了以下問題,但變得更加困惑。單/多核心單機上的單個/多個JVM
- 我有單個機器上運行的Java應用程序與單個JVM,20核心機器與20 GB RAM 20個Java線程。 (單機,單JVM,20核心,20 GB ram,20個java線程)
- 我有一臺帶有20個JVM的單機運行的java應用程序,每個JVM帶有1 GB RAM的20個核心機器,每個JVM有1個JAVA線程。 (單機,20 JVM,20芯,20 GB的RAM,20個Java線程)
從以上點1和2,其中一個是在應用 的
- 性能方面更好,以及爲什麼
- 機器的CPU利用率
- 如果即使增加線程數量,CPU也沒有被完全消耗,那麼在應用程序或機器中要做些什麼才能利用更多的CPU。
- 在哪種情況下上下文切換會更多。
在上面的1和2點中,假設每個線程需要10ms才能完成任務,那麼在情況1和2中所有任務將在多少時間內完成。請解釋。
我有搜索並聽說CPU密集型和I/O密集型應用程序的CPU利用率。你可以請解釋一下,因爲網絡我很困惑了很多。
一般建議線程數等於核心數。如果我有更多的線程數然後核心會有什麼影響。請解釋。
感謝您的回答。1)通常,單機上的1個JVM更好,或者考慮到應用程序不使用GC,單機上的多個JVM會更好? 2)如果即使增加線程數量,CPU也沒有被完全耗盡,那麼在應用程序或機器中要做些什麼才能利用更多的CPU。 3)在上面的1點和2點中,假設每個線程需要10ms才能完成任務,那麼在情況1和2中將在多長時間內完成所有任務。請解釋。 – VJS
@VJS對於1,3我相信我已經回答了上面的問題:「有太多的變數來給出一個有意義的答案,你將不得不測試你的應用程序來確定哪些方法最好」。爲2,運行你的代碼在一個體面的分析器,以找到瓶頸,然後修復它們。 – jtahlborn
感謝您的回覆。正如你所提到的,「在一個體面的剖析器下運行你的代碼以找到瓶頸.....」我的方法是什麼?比方說,如果我在JProfiler下運行我的代碼,那麼爲了解決這個問題,應該是什麼區域或標識機制,即爲什麼我的應用程序沒有使用更多的CPU。我的意思是,我在應用程序或Jprofiler中看到了什麼? – VJS