日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

让你脱胎成技术大神的JAVA开发技巧

發布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让你脱胎成技术大神的JAVA开发技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開發過程中,那些被稱為“666”的大神,領先你的,往往也只有幾個快捷鍵的距離。一些簡單的技巧和開發習慣,往往能讓你在開發過程中事半功倍。

避免重復創建對象

為什么?

更少的對象會需要更少的垃圾回收

使用的空間越少,應用的性能越好

怎么做?

重復利用一個對象,而不是在每次需要的時候都去創建一個功能一樣的對象

(這樣做)

String s = “No longer silly”;

(不要這樣)

String s = new String(“silly”);

不可變類中既提供構造函數,又提供了靜態工廠方法的,優先考慮使用靜態工廠方法。復用那些一旦初始化(使用靜態初始化)就不會改變的對象。+++

避免循環引用

為什么

一組相互引用的對象,如果他們沒有被其他對象直接引用的話,它們會變得不可達,這樣會導致它們一直都保留在內存里。

怎么做

你可以使用強引用來表示“父到子“的引用關系,使用弱引用來表示“子到父”的引用關系。

了解和學習一下 JVM 內存管理

為什么

有些人認為Java 程序員不需要知道內部 JVM 內存管理。毫無疑問,這種觀點明顯是錯誤的,如果想拓寬知識面和提升排除故障能力,你就必須要了解和學習一下 JVM 內存管理

怎么做?

JVM 內存分為 3 個內存空間

Java Heap:適用于所有的JVM廠商,通常用來拆分 YoungGen(幼苗 ) 和OldGen(終身享用)空間。

PermGen(永久代):適用于SunHotSpot VM((PermGen 空間在 Java7 或者Java8 更新中將會被刪除)

Native Heap(C-Heap):適用于所有的JVM廠商。正如你所看到的,JVM內存管理比使用 Xmx 設置最大值更為復雜。你需要查看每個角度,包括本地和PermGen 需求以及從主機上查看物理內存可用性(CPU core)。

使用==操作符來替代equals(Object)方法

為什么

==操作符的性能更好

例如,對于字符串比較,equals()方法會去比較字符串對象里的字符。==操作符會比較兩個對象的引用,來比較它們是否指向同一個實例。

怎么做:

當且僅當a==b 的時候才會有a.equals(b)

例如,對于重復調用的地方,使用靜態工廠方法來返回相同的對象。

避免使用finalizer

為什么

垃圾回收器需要單獨記錄等待終結的對象

調用finalize方法也有一定的開銷

Finalizer是不安全的,因為它有可能會復活一個對象,這樣會干擾垃圾回收。

避免使用引用對象

為什么

和finalizer一樣,垃圾回收器需要特別處理軟引用、弱引用以及幽靈引用。

盡管引用對象在某些方面很有作用,例如,簡化cache的實現,但是大量引用對象的存在會使得垃圾回收運行緩慢。

記錄一個引用對象的開銷遠遠超過一個普通對象(強引用)的開銷.

避免使用對象池

為什么

對象池不僅會使得更多的數據對象保持活動,同時會使得對象的存活時間延長.

值得注意的是,大量存活的數據對象的處理是GC的瓶頸,GC被優化成適合于處理許多壽命較短的對象

并且,創建新的對象而不是保持舊的對象存活,會對緩存的局部性有益.

不過,在一個包含大量大對象的環境下,例如大的數組,性能或許會因為使用對象池而有所提升。

選擇好的算法和數據結構

為什么

考慮一下通過鏈表來實現隊列的場景

即使你的程序不需要遍歷整個鏈表,但是垃圾回收器還是需要這樣做的。

如果元素的封裝者沒有把元素沒有把元素放在內存中鄰近的位置,這樣會破壞緩存局部性。因而會導致程序長時間的暫停,尤其是對象的指針分散在一個很大的堆區時,垃圾回收器會在標記階段追隨指針的時候頻繁遭遇緩存失效。

避免使用System.gc

為什么

Java語言規范里沒有保證調用System.gc會做什么。如果它規定了的話,或許會超出你的期望,也或許每次調用都做不同的事情。

避免使用太多的線程

為什么

進程上下文切換的次數會隨著要調度的進程的數目相應地增長,這樣會對性能有隱性的影響。

例如,IntelA-64處理器上的本地線程上下文的大小大概是幾千KB。

回顧靜態占用需求

為什么

設法對靜態內存占用進行合理的評估,在真正進行數據測試之前,設置一些 JVM 能力起點是非常有用的。

怎么做

應用程序以及相關數據將決定 Java堆空間占用需求。通過靜態內存,可預測下面的內存需求:

確定將會有多少不同的應用程序部署到預先計劃的一個單獨的 JVM 進程上,確定有多少個類需要在運行時加載:包括第三方 API。確定數據緩存占用,如應用程序加載內部緩存數據結構(和第三方 API)。 確定允許建立的中間件線程數量。

在 JVM 進程上部署的應用程序越多,對本地內存和 PermGen 空間的要求就越高。數據緩存并不是序列化為一個磁盤或數據庫,它將從 OldGen 空間里面需要額外的內存。設法對靜態內存占用進行合理的評估,在真正進行數據測試前,設置一些JVM能力起點是非常有用的。對于32 位JVM, 通常不推薦一個Java堆大小超過2GB(-Xms2048m,-Xmx2048m),對于 JavaEE應用程序和線程來說這樣將需要足夠的內存和本機堆 PermGen。這個評估是非常重要因為太多的應用程序部署在一個32 位JVM進程上很容易導致本機堆耗盡;尤其是在多重線程環境。對于64位JVM, 一個3GB或者4GB 的 Java 堆/JVM 進程是推薦的起點。

避免不需要的異常

為什么

異常處理會占用一定的事件,并且會打斷程序的正常執行流程。

作者曾經遇到這樣一場景,在客戶的應用里,一個正常的執行流程每秒會拋出成千上萬的NullPointerException。這個錯誤被糾正后,應用的性能里面有了一個數量級的提升。

避免使用大對象

為什么

大對象有時候需要直接在堆而不是在線程本地存儲區(thread local areas, TLA)進行內存分配。

大對象直接在堆上分配是有壞處的,因為它會更快地產生內存碎片。在虛擬機(例如JRockit)上分配大對象會降低性能,因為分配內存的時候會使用堆的全局鎖。

為了讓學習變得輕松、高效,今天給大家免費分享一套Java入門教學資源。幫助大家在成為Java架構師的道路上披荊斬棘。需要資料的歡迎加入學習交流群:9285,05736

總結

以上是生活随笔為你收集整理的让你脱胎成技术大神的JAVA开发技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。