方法區(永久代):
永久代的**有兩種:常量池中的常量,無用的類資訊,常量的**很簡單,沒有引用了就可以被**。對於無用的類進行**,必須保證3點:
類的所有例項都已經被**
載入類的classloader已經被**
類物件的class物件沒有被引用(即沒有通過反射引用該類的地方)
永久代的**並不是必須的,可以通過引數來設定是否對類進行**。
hotspot提供-xnoclassgc進行控制
使用-verbose,-xx:+traceclassloading、-xx:+traceclassunloading可以檢視類載入和解除安裝資訊
-verbose、-xx:+traceclassloading可以在product版hotspot中使用;
-xx:+traceclassunloading需要fastdebug版hotspot支援
——————
1.在實際應用場景中,遇到 線上 因perment區,被沾滿 而導致full gc(可配置)
場景中,每個業務請求都會動態生成構造乙個類(通過位元組碼構造,每個類都是不同的),並為此類例項化乙個物件給業務方使用,動態生成的類描述物件會存在於perm區. 於是perm滿了,又因為配置了 可**,會先進行full gc. (業務巔峰 是週期型的)
上圖中 可見, 有很多類似的類, 每個例項只有1個
2.loop 構造靜態資料
緩衝區溢位 棧溢位
1 緩衝區概念 緩衝區 buffer 又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。使用緩衝區有兩個好處 1 減少實際物理讀寫次數 2 緩衝區在建立時就被分配記憶體,這塊記憶體區域一直被重用,可以...
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...
緩衝區溢位
緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...