java实践_Java怪异实践
java實(shí)踐
總覽Java中有許多實(shí)踐使我感到困惑。 這里只是一些。 使用-Xmx和-Xms
選項(xiàng)-Xmx廣泛用于設(shè)置最大內(nèi)存大小。 如Java HotSpot VM Options中所述,以-X開頭的選項(xiàng)是非標(biāo)準(zhǔn)的(不保證所有VM實(shí)施都支持該選項(xiàng)),并且在以后的JDK發(fā)行版中,如有更改,恕不另行通知。
因此,您會認(rèn)為這種廣泛使用的選項(xiàng)將不再是非標(biāo)準(zhǔn)的。 實(shí)際上,有一個標(biāo)準(zhǔn)選項(xiàng)-mx和類似的-ms。 我不知道為什么這些標(biāo)準(zhǔn)選項(xiàng)沒有得到更廣泛的使用,甚至沒有記載。
僅將NIO用于非阻塞IO
非阻塞IO是用于套接字的NIO的新功能。 但是,NIO套接字的默認(rèn)行為是阻止。 文件僅在NIO中被阻止。 NIO2提供了一個異步接口,但是通過將您的請求傳遞給ExecutorService來實(shí)現(xiàn)(這實(shí)際上是在作弊,因?yàn)樗裁匆沧霾涣四鸁o法做的事情)
我個人更喜歡阻止NIO。 它僅在二進(jìn)制連接數(shù)較少時才適用,但是按恕我直言,這是一個選項(xiàng),無法獲得足夠的效果。
使用32位JVM節(jié)省內(nèi)存
使用32位JVM保存的內(nèi)存量遠(yuǎn)遠(yuǎn)少于您的想象。 現(xiàn)代64位JVM默認(rèn)情況下最多使用32位引用,最大堆大小為32 GB。 您不太可能希望擁有更大的堆大小(如果只是為了避免很長的完整GC時間)
與64位JVM相比,32位JVM的對象標(biāo)頭仍然較小,但是差別很小。 64位JVM可以使用更多,更大的寄存器(在AMD / Intel x64系統(tǒng)上),并且可以使用更大的地址空間,從而減少內(nèi)存限制。
使用線程使一切更快
使用多個線程可以提高CPU利用率,并減少IO延遲的影響。 它不能解決所有性能問題。 它不會使磁盤運(yùn)行得更快,不會增加網(wǎng)絡(luò)帶寬,不會增加L3緩存的大小,不會增加CPU到主內(nèi)存的帶寬或使數(shù)據(jù)庫顯著更快的速度。
同樣,使所有內(nèi)容并發(fā)也不會有太大區(qū)別。 當(dāng)您只有8個核心時,是否需要1000個并發(fā)集合? 不管您有多少個線程,一次都只能運(yùn)行8個線程,如果您有1000個集合,則很有可能兩個線程將使用同一集合。
對關(guān)鍵資源有選擇地使用并發(fā)。 否則,您不僅有增加開銷和降低應(yīng)用程序速度的風(fēng)險,而且還帶來引入的復(fù)雜性增加得多的風(fēng)險。
參考:來自Vanilla Java博客的JCG合作伙伴 Peter Lawrey在Java上的奇怪實(shí)踐 。
翻譯自: https://www.javacodegeeks.com/2012/06/odd-practices-in-java.html
java實(shí)踐
總結(jié)
以上是生活随笔為你收集整理的java实践_Java怪异实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击肉鸡怎么找(ddos怎么找到
- 下一篇: (ab)使用Java 8 Functio