package com.hello.xyy;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import org.junit.Test;
/**
* +----------------------------+
* | |
* | God bless this code |
* | |
* +----------------------------+
*
* @author lihao
* @date 2017/05/07
*/
class Car {
private double price;
private String colour;
public Car(double price, String colour) {
this.price = price;
this.colour = colour;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public String toString() {
return colour + "car costs $" + price;
}
}
public class TestReference {
@Test
public void softCanNotFirstBeGC(){
Car car = new Car(22000, "silver");
// 軟引用灭抑,只在內(nèi)存快溢出的時候才被gc
SoftReference<Car> softCar = new SoftReference<Car>(car);
int i = 0;
car=null;
while (softCar.get() != null) {
System.out.println(String.format("Get str from object of SoftReference: %s, count: %d", softCar.get().getColour(), ++i));
if (i % 10 == 0) {
System.gc();
System.out.println("System.gc() was invoked!");
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("object a was cleared by JVM!");
}
@Test
public void firstCanBeGc(){
Car car = new Car(22000, "silver");
// 弱引用辟灰,不在有改對象的引用時淫半,在下一次gc被釋放托酸。
WeakReference<Car> weakCar = new WeakReference<Car>(car);
int i = 0;
car=null;
while (weakCar.get() != null) {
System.out.println(String.format("Get str from object of WeakReference: %s, count: %d", weakCar.get().getColour(), ++i));
if (i % 10 == 0) {
System.gc();
System.out.println("System.gc() was invoked!");
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("object a was cleared by JVM!");
}
@Test
public void canBeCollected() {
Car car = new Car(22000, "silver");
WeakReference<Car> weakCar = new WeakReference<Car>(car);
int i = 0;
while (true) {
if (weakCar.get() != null) {
i++;
System.out.println("Object is alive for " + i + " loops - " + weakCar);
} else {
System.out.println("Object has been collected.");
break;
}
}
}
@Test
public void canNotBeCollected() {
Car car = new Car(22000, "silver");
WeakReference<Car> weakCar = new WeakReference<Car>(car);
int i = 0;
while (true) {
car.getColour();
if (weakCar.get() != null) {
i++;
System.out.println("Object is alive for " + i + " loops - " + weakCar);
} else {
System.out.println("Object has been collected. i="+i);
break;
}
}
}
}
SoftReference和WeakReference
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門颗管,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陷遮,“玉大人,你說我怎么就攤上這事垦江∶辈觯” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵比吭,是天一觀的道長绽族。 經(jīng)常有香客問我,道長衩藤,這世上最難降的妖魔是什么吧慢? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮赏表,結(jié)果婚禮上娄蔼,老公的妹妹穿的比我還像新娘怖喻。我一直安慰自己底哗,他們只是感情好岁诉,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跋选,像睡著了一般涕癣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上前标,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稽犁!你這毒婦竟也來了焰望?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布镊讼,位于F島的核電站,受9級特大地震影響平夜,放射性物質(zhì)發(fā)生泄漏蝶棋。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一忽妒、第九天 我趴在偏房一處隱蔽的房頂上張望玩裙。 院中可真熱鬧兼贸,春花似錦、人聲如沸吃溅。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽决侈。三九已至螺垢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赖歌,已是汗流浹背枉圃。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一犯祠、引用對象類型定義 首先旭等,引用對象在Java定義中有三種類型,從弱到強依次為:軟引用衡载、弱引用與虛引用搔耕,三種級別也...
- 為了更好的利用大屏的優(yōu)勢挥等,咱們就不得不這么做奖地。 買了一根HDMI線彩郊,Pro可以接揍诽, 家里的air連了轉(zhuǎn)接器,還是無...