Java內存模型
Java的併發採用的是共享內存模型
Java內存模型:JMM決定一個線程對共享變量的寫入何時對另一個線程可見
共享變量的通信方法 本地內存A(共享變量的副本) 主內存
JVM對Java內存模型的實現
Java內存模型把內存分成了兩部分:線程棧區和堆區
每個線程都有自己的線程棧,線程棧包含了
1、當前線程執行的方法調用相關信息(調用棧)
2、當前方法的所有本地變量信息。
java內存模型
equals與==
-
對於==
a.如果作用於基本數據類型的變量,則直接比較其存儲的 “值”是否相等;
b.如果作用於引用類型的變量,則比較的是所指向的對象的地址 -
對於equals方法,注意:equals方法不能作用於基本數據類型的變量,equals繼承Object類,比較的是是否是同一個對象
a.如果沒有對equals方法進行重寫,則比較的是引用類型的變量所指向的對象的地址;
b.諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容。
測試案例:
drop、truncate和delete的區別
DROP:
DLL:data definition language-數據定義語言
操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的存儲過程/函數將保留,但是變爲invalid狀態. drop語句將表所佔用的空間全部釋放 .
TRUNCATE:
DLL:data definition language-數據定義語言
操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,只在事務日誌中記錄頁的釋放。 truncate 語句缺省情況下表空間釋放到 minextents個 extent,除非使用reuse storage;
DELETE:
DML:Data Manipulation Language-數據操作語言
操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.
DELETE 不帶WHERE 子句刪除表中的所有數據. DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 .
以下情況是TRUNCATE無法代替DELETE
1、要保留標識的情況下不能用 TRUNCATE TABLE,因爲 TRUNCATE TABLE 會重置標識。
2、需要使用觸發器的情況下不能使用 TRUNCATE TABLE ,它不會激發觸發器。
3、對於由 FOREIGN KEY 約束引用的表(即主鍵所在的表,不是外鍵所在的表)不能使用 TRUNCATE TABLE。
4、對於參與了索引視圖的表不能使用 TRUNCATE TABLE ,注意指索引視圖,並非普通視圖。
執行速度:
DROP>TRUNCATE>DELETE
https://blog.csdn.net/zxd112233/article/details/5733461