String.intern() 將字串放入全域哈希表(StringTable),採原生 JNI 實現。優點:最大程度共享;缺點:
核心介面:
public interface IStringPoolParticipant {
void shareStrings(StringPool pool);
}
物件樹節點選擇性實作此介面,在 shareStrings 中提交需共享字串(如 type = set.add(type)),並遞迴通知子節點。
Workspace.open() 完成啟動後,呼叫 InternalPlatform.addStringPoolParticipant(saveManager, rule) 註冊根節點與調度規則。StringPoolJob(單例 Job)收集所有參與者,依 ISchedulingRule 合併調度條件。shareStrings:建立臨時 StringPool(包裝 HashMap),遍歷參與者提交字串,估算節省空間(savings += 44 + 2 * length)。StringPool 捨棄,不長期佔用記憶體。StringPool:階段性緩衝池,add() 回傳共享實例並粗略計算節省量。StringPoolJob:異步背景任務,整合 Eclipse Jobs API 調度,支援 ISchedulingRule 依賴管理。InternalPlatform:全域註冊入口。大量字串重複的資料模型(如工作區資源樹、標記資訊、XML 解析結果),透過分區共享大幅降低記憶體佔用。