java內(nèi)存模型:
程序計數(shù)器:用于保存當前正在執(zhí)行的程序的內(nèi)存地址。java虛擬機的多線程是通過輪流獲取cpu時間片執(zhí)行的洒沦,為了線程切換后能找到正確的位置机断。每個線程都需要一個獨立的程序計數(shù)器。
本地方法棧:為虛擬機的Native方法服務担巩。
堆:所有線程共享的一塊內(nèi)存區(qū)域。對象實例在這分配没炒。
方法區(qū):線程共享的區(qū)域涛癌。儲存虛擬機加載的類信息。編譯后的代碼送火。常量拳话,靜態(tài)變量。
運行時常量池:代表運行時每個class文件中的常量表种吸。包括幾種常量:編譯時的數(shù)字常量弃衍、方法或者域的引用。
StringBuffer是線程安全的StringBuilder是非線程安全的
類加載工作機制:
1.裝載:將java二進制代碼裝入JVM坚俗,生成class文件镜盯。
2.連接:1 校驗 檢查class文件正確性 2 準備 給類的靜態(tài)變量分配空間 3 解析 將符號引用轉成直接引用岸裙。
3 .初始化:對類的靜態(tài)變量,靜態(tài)代碼塊速缆,靜態(tài)方法初始化降允。
雙親委派模型:類加載器收到類加載請求,首先將請求委派給父類加載器完成
hashcode 和equal 方法:
java集合要保證元素不重復 根據(jù)Object.equals方法判斷艺糜,但是如果集合里有1000個元素就要執(zhí)行1000遍equals方法剧董,效率低,于是java采用哈希表的原理破停。