Effective Java

Ch2

item2

  • Telescoping constructor pattern : does not scale well
  • JavaBeans Pattern : allows inconsistency, mandates mutability
  • Builder (Recommend)
    • Hierarchical Builder (Subclass)

item3

  • Singleton with public final field
  • Singleton with static factory
  • Enum Singleton (The preferred approach)

item4

  • Noninstantiable Utility Class : 禁止通過默認構造函數實例化

item6

p.22 - p.23

  • 效能問題的根源

    • isRomanNumeralSlow() 方法每次調用時都會創建一個新的 Pattern 對象
    • String.matches() 方法內部也會重複創建 Pattern 對象
    • Pattern 對象的編譯成本較高,重複創建會影響效能
  • 性能差異

    • Slow 版本:每次檢查羅馬數字時都要重新編譯正則表達式
    • Fast 版本:只在類加載時編譯一次正則表達式,後續重複使用
  • 實際應用建議 :

    • 對於經常使用的正則表達式,應該將 Pattern 定義為靜態常量,類似的情況還包括 : 資料庫連接、線程池、緩存等重量級對象

p.24

  • 自動裝箱(Autoboxing)帶來的性能問題

item7

自定義異常處理

  • Spring : @RestControllerAdvice
  • Result Pattern

記憶體洩漏(Memory Leak)

  • 原始的 pop() 方法存在記憶體洩漏,當元素被移除時,陣列中的引用仍然存在
  • 雖然 size 減少了,但被pop()的對象仍然被陣列引用著,這些廢棄的引用會阻止垃圾回收機制(GC)回收這些對象

item8

  • 清理器(Cleaner)和資源管理
    • 避免使用 finalizerscleaners
    • 只有在處理非 JVM 管理的資源,且需要額外安全保障時才考慮使用
      • 原生內存(Native Memory)操作
      • 操作系統資源
        • 檔案描述符(File Descriptors)
        • Network Sockets
        • 系統臨時檔案
        • 共享內存區域
      • 與外部系統的連接:
        • Native Libraries 載入
        • 硬體設備連接
        • IPC(進程間通信)資源
      • JNI
      • 圖形處理資源

item9

  • Using try-with-resource (recommend)

Ch3

item10

Composition vs Inheritance

item11

HashCode

item12

toString()

item13

Cloneable (I)

item14

Comparable (I)

Ch4

item16

Getters & Setters

Public class with exposed immutable fields