當前位置:
首頁 > 最新 > JVM內存分配、GC原理與垃圾收集器

JVM內存分配、GC原理與垃圾收集器

一、聲明

本文作者不對本文內容負責,全是瞎說,千萬不要相信!

二、題記

在之前的一篇文章里,給大家講了Java虛擬機JVM以及JVM的運行時數據區等概念,今天來講講JVM內存分配、GC原理與垃圾收集器(隨後你會發現文章講的內容跟這句話一點關係都沒有,跟題目其實也沒關係)。

三、引出本文的原始問題:

上個月,我給一群閑的無聊評論手機的同事提了一個問題,大家也可以想一想:安卓手機到底為何越用越卡?

四、安卓手機越用越卡的原因:

根據第三方的調研數據顯示,有77%的Android手機用戶承認自己曾遭遇過手機變慢的影響,百度搜索「Android+卡慢」,也有超過900萬條結果。在業內,Android手機一直有著「越用越慢」的口碑,這個現象甚至超出了硬體範疇——很多中高端Android手機在硬體參數上都優於同一代iPhone,但是它們仍然會在使用半年到一年的時間後進入「欠流暢」的狀態——這無疑是一件令人困擾的事情。

接下來從各個方面比較下Android和IOS操作系統:

1、操作系統起源:

IOS基於UNIX操作系統,UNIX操作系統是商業化運作的,是需要收費的。嚴格來說,UNIX操作系統並不是一個開源的操作系統。

Android基於LINUX操作系統,Linux是一套免費使用和自由傳播的類Unix操作系統。因此,LINUX操作系統是一個開源的操作系統。

2、操作系統封閉性:

喬布斯曾經邀請Linux的創始者Linus Torvalds到蘋果工作,放棄Linux的開源,協助開發Mac OS封閉式的Mach內核,後者與喬布斯大吵一架之後明確表示拒絕。而從Mac OS開始,蘋果就將操作系統的私有化視為企業戰略,用喬布斯的話來講,他是將iOS裝進了iPhone這個盒子里,然後賣給了用戶。所以,iPhone之所以不會出現「越用越卡」的情況,是因為蘋果公司對它的手機從硬體到軟體擁有最高的管理許可權,在封閉式的環境中,來自第三方的應用程序無法調用超過iPhone承受限度的指令,自然也不可能造成持續性的系統損傷。

Android手機,由於開源的公開條件,Google無法從代碼這一埠約束第三方的應用程序,同時,由於Linux核心設定應用在調取系統功能時一定要取得ROOT許可權,這也導致大量應用因為單一功能的實現需求而獲得整個ROOT層面的支配,可以在Android手機的任意儲存位置進行讀寫,這種高自由度無異於開啟了潘多拉魔盒,讓Android手機無法對惡意App事先設防。這也是開源軟體備受爭議、且在商用領域遭到抵觸的原因:它只關心是否授予了用戶自由——這個自由也包括逾越邊界的自由——而沒有從最壞的出發點去考慮如何規避被濫用的風險。

3、Android的後台運行:

Android系統有五類進程(有人也說有七類),分別是前台進程、可見進程、服務進程、後台進程、空進程,優先順序為:前台進程>可見進程>服務進程>後台進程>空進程。在沒有安裝清理類應用的時候,一部Android手機只能依賴系統默認的分配機制來自動調節內存使用,只要應用程序提出請求,大部分進程只要打開後都會被保留在內存當中,這原本是為了讓用戶在再度激活這些進程時不需要重新載入、節省時間的初衷考慮,但是Android沒有料到激烈的市場競爭會驅使應用程序產生「劣幣驅良幣」的趨勢,很多開發者出於商業目的,在不需要留存在內存的情況下也想方設法的讓應用程序保持潛在運行狀態,一個兩個還好說,但是一旦數量更多,Anrdoid手機就會頻頻卡頓和發熱。

4、流氓的開發商:

因為機制原因,iOS能清理內存,而Android中許多在不斷重生,各種進程與服務在後台偷偷運行。

Android應用程序在後台不斷重啟的方式有兩種:自啟動和關聯啟動。

自啟動:

自啟動僅僅是開機自啟嗎?然而,我們看一下幾款APP的節操:

圖片來自於其他大神的文章

看到了吧,APP自啟有辣么多方式,真的是讓我們瞠目結舌!語言環境變化時幹嘛要啟動你?真是節操碎了一地!

關於「關聯啟動」:如果你用的是Android手機,你可以打開看一下,很多app都有關聯啟動選項,熟話說打死小的,出來老的,乾死一個APP,成千上萬個APP又站了起來:

看一張來自網路的圖片:

就問你怕不怕,惡不噁心!

五、安卓手機卡頓之GC:

其實,Android手機很卡的另外一個重要原因和Java虛擬機的內存模型和垃圾回收機制有關係,但是,哥們要下班了,不寫了,放到下一篇文章里寫,你說氣不氣人,嘿嘿….


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 一個程序員的世界 的精彩文章:

TAG:一個程序員的世界 |