android 內存初探之常量內存

背景

有下面一段代碼,求解:在 Test 這個類加載之后 initData 被調用之前, test add 這個常量會被 load 進內存,從而占用內存空間嗎?

public class Test {

  private static Set<String> set;
  private static void initData() {
   List<String> list = new LinkedList<>();

    //省略若干字符串幌衣,大小在 20K左右
    list.add("test add");

    set = new HashSet<>(list.size());
    set.addAll(list);
    list.clear();
  }

 public static boolean isContainsWord(String key) {
      if (set == null) {
        initData();
      }

      if (set.contains(key)) {
        return true;
      }
    return false;
  }

通過 log 打印出當前應用程序占用的內存。

public class DebugHelper {

  private static final String TAG = "DebugHelper";

  public static void displayBriefMemory() {

    final ActivityManager activityManager = (ActivityManager) GlobalConfig.getAppContext().getSystemService(ACTIVITY_SERVICE);

    ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
    List<ActivityManager.RunningAppProcessInfo> runningAppProcessesList = activityManager.getRunningAppProcesses();

    activityManager.getMemoryInfo(info);

    Log.i(TAG, "系統(tǒng)剩余內存:" + (info.availMem >> 10) + "k");

    for (ActivityManager.RunningAppProcessInfo processInfo : runningAppProcessesList) {
      int pid = processInfo.pid;
      int uid = processInfo.uid;
      String processName = processInfo.processName;
      int[] pids = new int[]{pid};
      Debug.MemoryInfo[] memoryInfos = activityManager.getProcessMemoryInfo(pids);
      int memorySize = memoryInfos[0].dalvikPrivateDirty;
      Log.d(TAG, "displayBriefMemory: processName= " + processName + " ,pid =" + pid + " ,uid = " + uid + " , memorySize :" + memorySize);

    }
  }
}

實驗結果如下:

在 字符串大小為 0 時壤玫,即不聲明任何 list.add("test add"); 之類的語句:

1. 在加載 Test 類之前豁护,占用大小空間為:
2020-03-09 21:44:39.525 24702-24702/xxx D/DebugHelper: displayBriefMemory: processName= com.xxx.xxx ,pid =24702 ,uid = 10941 , memorySize :12980

2. 加載 Test類之后,未執(zhí)行 initData 之前
2020-03-09 21:44:39.642 24702-24702/xxx D/DebugHelper: displayBriefMemory: processName= com.snaptube.premium ,pid =24702 ,uid = 10941 , memorySize :12984

3. 加載 Test類之后垦细,執(zhí)行 initData 之后
2020-03-09 21:44:39.850 24702-24702/xxx D/DebugHelper: displayBriefMemory: processName= com.xxx.xxx ,pid =24702 ,uid = 10941 , memorySize :12988

add字符串大小不為 0 時择镇,即在類中聲明了很多 list.add("test add"); 之類的語句:
字符串常量大小累計在 20K+,下面是相關打印:

1.  在加載 Test 類之前,占用大小空間為:
2020-03-09 21:42:34.101 24029-24029/xxx D/DebugHelper: displayBriefMemory: processName= com.xxx.xxx ,pid =24029 ,uid = 10941 , memorySize :16684

2.  加載 Test類之后括改,未執(zhí)行 initData 之前
2020-03-09 21:42:34.221 24029-24029/xxx D/DebugHelper: displayBriefMemory: processName= com.xxx.xxx ,pid =24029 ,uid = 10941 , memorySize :16688

3.加載 Test類之后腻豌,執(zhí)行 initData 之后
2020-03-09 21:42:34.437 24029-24029/xxx D/DebugHelper: displayBriefMemory: processName= com.xxx.xxx ,pid =24029 ,uid = 10941 , memorySize :16856

由上面兩組內存占用情況可以得知:

  1. 不管在 Test 類中有沒有聲明 list.add("test") 之類的語句,在加載 Test 類之后嘱能,內存都只會上漲 4kb吝梅。由此可見, 聲明 list.add("test") 但不執(zhí)行惹骂,“test” 之類字符串并不會加入到常量池苏携,不會增加額外的內存。

  2. 初始化 set 占用的內存在 4kb 左右对粪,與 創(chuàng)建一個類所占用的內存相當右冻。

參考鏈接:

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末装蓬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纱扭,更是在濱河造成了極大的恐慌牍帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳蛾,死亡現(xiàn)場離奇詭異暗赶,居然都是意外死亡,警方通過查閱死者的電腦和手機肃叶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門蹂随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人因惭,你說我怎么就攤上這事岳锁。” “怎么了筛欢?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵浸锨,是天一觀的道長。 經(jīng)常有香客問我版姑,道長,這世上最難降的妖魔是什么迟郎? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任剥险,我火速辦了婚禮,結果婚禮上宪肖,老公的妹妹穿的比我還像新娘表制。我一直安慰自己,他們只是感情好控乾,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布么介。 她就那樣靜靜地躺著,像睡著了一般蜕衡。 火紅的嫁衣襯著肌膚如雪壤短。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天慨仿,我揣著相機與錄音久脯,去河邊找鬼。 笑死镰吆,一個胖子當著我的面吹牛帘撰,可吹牛的內容都是我干的。 我是一名探鬼主播万皿,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼摧找,長吁一口氣:“原來是場噩夢啊……” “哼核行!你這毒婦竟也來了?” 一聲冷哼從身側響起蹬耘,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤芝雪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后婆赠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绵脯,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年休里,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛆挫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妙黍,死狀恐怖悴侵,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拭嫁,我是刑警寧澤可免,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站做粤,受9級特大地震影響浇借,放射性物質發(fā)生泄漏。R本人自食惡果不足惜怕品,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一妇垢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肉康,春花似錦闯估、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炫乓,卻和暖如春刚夺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厢岂。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工光督, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塔粒。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓结借,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卒茬。 傳聞我的和親對象是個殘疾皇子船老,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容