finalize() 從 Java 9 開始 deprecated,Java 18 標記為 deprecated for removal,替代方案是 java.lang.ref.Cleaner。這篇從 PhantomReference 和 ReferenceQueue 的運作原理講起,說明 Cleaner 如何用獨立的清理執行緒安全地回收 native 資源,解決 finalize 的兩次 GC 回收、物件復活、執行時機不可控等問題,附完整程式碼範例、常見錯誤用法與 JDK 內部的實際應用案例。
Java Cleaner 與 PhantomReference 教學|取代 finalize() 的資源清理機制
Java GC 完整解析|垃圾回收原理、七種 GC 比較、面試重點整理
Java GC 是技術面試必考也是 JVM 效能調校的關鍵知識。這篇從 Heap 的 Young Gen、Old Gen 分代結構與 GC Roots 可達性分析講起,整理 Mark-Sweep、Copying、Mark-Compact 三種基礎回收演算法的差異,再逐一比較 Serial、Parallel、CMS、G1、ZGC、Shenandoah、Epsilon 七種收集器的設計取捨與適用場景,附 JVM 參數速查表與面試高頻問題整理。
Java 25、26、27 新特性整理|LTS 升級重點與 Preview 功能追蹤
Java 25 是目前最新 LTS,帶來 Compact Source Files、Scoped Values、Flexible Constructor Bodies 等正式功能。Java 26 加入 HTTP/3 支援與 Applet API 移除,Java 27 預計九月發佈,Compact Object Headers 將成為預設。整理三個版本的重點特性、程式碼範例,以及 Structured Concurrency 等一直停在 preview 的功能現況。
Java 21 全新 Virtual Threads 教學|JDK 21 虛擬執行緒與 Thread Pool 比較
Virtual Threads 是 JDK 21 正式推出的輕量執行緒,讓 JVM 在少數 OS thread 上多工跑大量虛擬執行緒,不用再靠加大 thread pool 來撐高並發 IO。這篇從 Platform Thread 的瓶頸講起,整理 carrier thread 的 mount / unmount 機制、API 用法、pinning 問題與 JDK 24 的改善,附 Spring Boot 整合設定與常見陷阱。
Java 版本演進|從 Java 8 到 25 的語言進化史
從 Java 8 的 Lambda 與 Stream,到 Java 25 的 virtual threads、stream gatherers、compact object headers,整理 Java 8、11、17、21、25 五個 LTS 的釋出時間、特色功能、各家 OpenJDK 發行版的免費支援到期日,順便提一下 2026 年 3 月剛 GA 的非 LTS Java 26 帶來什麼新東西。給還在 Java 8 / 11 想升級的開發者一份對照地圖。
資料庫教學7-1:資料表視圖(View)教學 #MySQL #MariaDB
視圖是資料庫中一種虛擬的表格,它基於一個或多個實際表格的查詢結果而創建。它可以被視為一個預先定義的查詢,具有獨立的名稱,方便查詢和使用。通過使用視圖,可以將複雜的查詢操作簡化為單個表格,提供更清晰、更易讀的數據視圖。視圖還可以用於控制對數據的訪問權限,只提供特定的數據子集給用戶或應用程序。它提供了更高的數據安全性和隱私保護。
資料庫教學3-4:資料庫正規化是什麼? #MySQL #MariaDB
資料庫正規化(Database normalization)簡單的講就是讓資料庫避免重複資料、減少空間浪費、避免資料不一致、讓資料更好管理的一系列規劃方式。本篇文章屬於概念性質,對於MariaDB、MySQL、MS SQL、Oracle Database、H2 Database等各種使用SQL的關聯式資料庫都是通用的概念。
資料庫教學2:我該使用MariaDB還是MongoDB? #MySQL #MariaDB
關連式資料庫管理系統(RDBMS)存在已久,有嚴謹的資料結構檢查能力,到現在還是非常好用。NoSQL是網路迅速發展時代下的後起之秀,通常捨棄那些資料結構檢查來提高效能,也漸漸成為各種應用的優先選擇。本篇文章也可以看作是「我該使用傳統關連式資料庫還是文件式NoSQL資料庫?」,我會介紹兩者功能的差異、授權方式的考量、我自己的實務應用方式。
MongoDB的Transaction教學,讓MongoDB不再只能做「假交易」
早期的MongoDB沒辦法做Transaction,必須用要使用db.collection.findAndModify()來進行尋找合併修改的元子操作,或是透過Two Phase Commit來模擬交易行為。好消息是從MongoDB 4.0開始增加了Transaction機制,MongoDB 5.0、6.0又更完善了此功能。本文教大家如何在透過JavaScript來使用真正的MongoDB Transaction。
Java的Arrays.asList()與List.of()差別
Arrays全名是java.util.Arrays,是自Java 1.2就有的API。而List(java.util.List)雖然也是Java 1.2就開始有的API,其中的List.of()卻是Java 9才新增的方法。Arrays.asList()與List.of()兩種都是快速建立List物件的方法,但使用上有不太一樣的地方。本文講解兩種List物件的差異,以及為什麼會有這兩種方式產生串列。