// 工廠模式優化前
public static Credit getNewCredit() { return new Credit(); }
// 優化後:原型模式 + clone()
private static final Credit PROTO = new Credit();
public static Credit getNewCredit() { return (Credit) PROTO.clone(); }
clone() 跳過建構子鏈,效能提升明顯;陣列複製同理用 Arrays.copyOf/System.arraycopy。
JDK 1.4+ java.nio:Selector + Channel + Buffer 替代「一請求一執行緒」模型,大幅降低執行緒開銷,支援萬級併發(Netty 底層基石)。
異常建立堆疊追蹤開銷極大(fillInStackTrace() native 呼叫)。禁用:用異常跳出循環、做驗證失敗返回。
建構子鏈自動初始化:null/0/0.0/false。顯式賦相同值純屬多餘字節碼。
final 類不可繼承,final 方法不可覆寫 → JIT 編譯器可激進內聯,平均提升 50% 呼叫效能(視編譯器實現)。
參數、臨時變數在棧上,存取速度快於堆上的實例/靜態欄位;JIT 更易對局部變數做逃逸分析、標量替換。
val * 8 → val << 3、val / 2 → val >> 1位移指令單週期,乘除法多週期;注意加註釋維護可讀性。
WebLogic、OpenSymphony 支援。適用購物車、目錄、門戶首頁等「讀多寫少」頁面,避免重複執行邏輯。
直接遠端存取 Entity Bean:每個 getXxx() 都是 RMI 呼叫。Session Bean 本地封裝,組裝資料一次返回,減少網路往返;事務邊界也更清晰(僅在 Session Bean 方法結束提交)。
| 指令 | 時機 | 適用場景 |
|---|---|---|
<%@ include file="..." %> | 編譯期 | 靜態頁首/尾、版權聲明,效能最佳 |
<jsp:include page="..." /> | 運行期 | 動態內容、頻繁變化、請求前無法確定資源 |
Entity Bean 僅讀操作事務標記 read-only="true",容器跳過 ejbStore(),減少資料庫寫入。
InitialContext.lookup() 開銷大。放在 Servlet.init() 或實作 EJBHomeCache (Singleton) 複用。
XxxLocalException。| 策略 | 優點 | 缺點 |
|---|---|---|
| DB Identity/Sequence | 簡單可靠 | 可移植性差 |
| Entity Bean 自增 | 獨立 | 需可序列化事務、效能差 |
| UUID/GUID | 全域唯一、去中心化 | 長度長、索引效能較差 |
| RMI + JNDI 集中發號器 | 可移植、高效 | 單點故障風險(需集群化) |
<%@ page session="false" %>。HttpSessionBindingListener 清理、縮短逾時時間。setFetchSize(512) 減少資料庫往返(預設 32 行)。<applet archive="app.jar" ...>
實作 AppletStub、Runnable,setStub() 傳遞 codebase,validate() 刷新顯示。
避免 UI 凍結;ALLBITS 觸發 repaint(),ERROR/ABORT 顯示佔位符。
public void update(Graphics g) { paint(g); } // 取消預設 clearRect
// 進階:只重繪髒區域 g.clipRect(x,y,w,h);
引入 e_queue + 時間窗口(如 10ms),只處理最後一個事件;耗時操作另開 Worker 執行緒。
drawImage,低優先級繪圖執行緒。validate()/contentsLost() 檢查。setScrollMode() 啟用 OS 級 Blitting(Win32 GDI、X11、MacOS 支援),只重繪新露出區域,前台滾動顯著加速。