Java中有許多實踐使我感到困惑。 這里只是一些。 使用-Xmx和-Xms
選項-Xmx廣泛用于設置最大內存大小。 如Java HotSpot VM Options中所述,以-X開頭的選項是非標準的(不保證在所有VM實現中均受支持),并且在以后的JDK發行版中,如有更改,恕不另行通知。
因此,您會認為這種廣泛使用的選項將不再是非標準的。 實際上,有一個標準選項-mx和類似的-ms。 我不知道為什么這些標準選項沒有得到更廣泛的使用,甚至沒有記載。
僅將NIO用于非阻塞IO
非阻塞IO是用于套接字的NIO的新功能。 但是,NIO套接字的默認行為是阻止。 文件僅在NIO中被阻止。 NIO2提供了一個異步接口,但是通過將您的請求傳遞給ExecutorService來實現(這實際上是在作弊,因為它什么也做不了您已經做不到的事情)
我個人更喜歡阻止NIO。 它僅在二進制連接數較少時才適用,但是按恕我直言,這是一種選擇不多的選項。
使用32位JVM節省內存
使用32位JVM保存的內存量遠遠少于您的想象。 現代64位JVM默認情況下最多使用32位引用,最大堆大小為32 GB。 您不太可能希望擁有更大的堆大小(如果只是為了避免很長的完整GC時間)
與64位JVM相比,32位JVM的對象標頭仍然較小,但是差別很小。 64位JVM可以使用更多,更大的寄存器(在AMD / Intel x64系統上),并且可以使用更大的地址空間,從而減少內存限制。
使用線程使一切更快
使用多個線程可以提高CPU利用率并減少IO延遲的影響。 它不能解決所有性能問題。 它不會使磁盤運行得更快,不會增加網絡帶寬,不會增加L3緩存的大小,不會增加CPU到主內存帶寬的速度,也不會大大提高數據庫的速度。
同樣,使所有內容并發也不會有太大區別。 當您只有8個核心時,是否需要1000個并發集合? 不管您有多少個線程,一次都只能運行8個線程,如果您有1000個集合,則很有可能兩個線程將使用同一集合。
對關鍵資源有選擇地使用并發。 否則,您不僅有增加開銷和降低應用程序速度的風險,而且還帶來引入的復雜性增加的風險。
參考:來自Vanilla Java博客的JCG合作伙伴 Peter Lawrey在Java上的奇怪實踐 。
翻譯自: https://www.javacodegeeks.com/2012/06/odd-practices-in-java.html