国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

面試題:“你能不能談談,java GC是在什么時候,對什么東西,做了什么事情?”

2019-11-15 00:57:23
字體:
來源:轉載
供稿:網友
面試題:“你能不能談談,java GC是在什么時候,對什么東西,做了什么事情?”

面試題目:地球人都知道,Java有個東西叫垃圾收集器,它讓創(chuàng)建的對象不需要像c/cpp那樣delete、free掉,你能不能談談:

GC是在什么時候,對什么東西,做了什么事情?

以上算是三個問題,下面逐一分析:

問題一回答:什么時候?1.系統(tǒng)空閑的時候。 分析:這種回答大約占30%,遇到的話一般我就會準備轉向別的話題,譬如算法、譬如SSH看看能否發(fā)掘一些他擅長的其他方面。2.系統(tǒng)自身決定,不可預測的時間/調用System.gc()的時候。 分析:這種回答大約占55%,大部分應屆生都能回答到這個答案,起碼不能算錯誤是吧,后續(xù)應當細分一下到底是語言表述導致答案太籠統(tǒng),還是本身就只有這樣一個模糊的認識。

3.能說出新生代、老年代結構,能提出minor gc/full gc 分析:到了這個層次,基本上能說對GC運作有概念上的了解,譬如看過《深入JVM虛擬機》之類的。這部分不足10%。4.能說明minor gc/full gc的觸發(fā)條件、OOM的觸發(fā)條件,降低GC的調優(yōu)的策略。 分析:列舉一些我期望的回答:eden滿了minor gc,升到老年代的對象大于老年代剩余空間full gc,或者小于時被HandlePRomotionFailure參數強制full gc;gc與非gc時間耗時超過了GCTimeRatio的限制引發(fā)OOM,調優(yōu)諸如通過NewRatio控制新生代老年代比例,通過 MaxTenuringThreshold控制進入老年前生存次數等……能回答道這個階段就會給我?guī)肀容^高的期望了,當然面試的時候正常人都不會記得每個參數的拼寫,我自己寫這段話的時候也是翻過手冊的。回答道這部分的小于2%。

總結:程序員不能具體控制時間,系統(tǒng)在不可預測的時間調用System.gc()函數的時候;當然可以通過調優(yōu),用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold控制進入oldObject的次數,使得oldObject 存儲空間延遲達到full gc,從而使得計時器引發(fā)gc時間延遲OOM的時間延遲,以延長對象生存期。

問題二回答:對什么東西?1.不使用的對象。 分析:相當于沒有回答,問題就是在問什么對象才是“不使用的對象”。大約占30%。2.超出作用域的對象/引用計數為空的對象。 分析:這2個回答站了60%,相當高的比例,估計學校教java的時候老師就是這樣教的。第一個回答沒有解決我的疑問,gc到底怎么判斷哪些對象在不在作用域的?至于引用計數來判斷對象是否可收集的,我可以會補充一個下面這個例子讓面試者分析一下obj1、obj2是否會被GC掉?

class C{ public Object x; } C obj1、obj2 = new C(); obj1.x = obj2; obj2.x = obj1; obj1、obj2 = null;3.從gc root開始搜索,搜索不到的對象。 分析:根對象查找、標記已經算是不錯了,小于5%的人可以回答道這步,估計是引用計數的方式太“深入民心”了。基本可以得到這個問題全部分數。 PS:有面試者在這個問補充強引用、弱引用、軟引用、幻影引用區(qū)別等,不是我想問的答案,但可以加分。

4.從root搜索不到,而且經過第一次標記、清理后,仍然沒有復活的對象。 分析:我期待的答案。但是的確很少面試者會回答到這一點,所以在我心中回答道第3點我就給全部分數。總結:超出了作用域或引用計數為空的對象;從gc root開始搜索找不到的對象,而且經過一次標記、清理,仍然沒有復活的對象。

問題三回答:做什么?1.刪除不使用的對象,騰出內存空間。 分析:同問題2第一點。40%。2.補充一些諸如停止其他線程執(zhí)行、運行finalize等的說明。 分析:起碼把問題具體化了一些,如果像答案1那樣我很難在回答中找到話題繼續(xù)展開,大約占40%的人。 補充一點題外話,面試時我最怕遇到的回答就是“這個問題我說不上來,但是遇到的時候我上網搜一下能做出來”。做程序開發(fā)確實不是去鍛煉茴香豆的“茴”有幾種寫法,不死記硬背我同意,我不會糾語法、單詞,但是多少你說個思路呀,要直接回答一個上網搜,我完全沒辦法從中獲取可以評價應聘者的信息,也很難從回答中繼續(xù)發(fā)掘話題展開討論。建議大家盡量回答引向自己熟悉的,可討論的領域,展現給面試官最擅長的一面。

3.能說出諸如新生代做的是復制清理、from survivor、to survivor是干啥用的、老年代做的是標記清理、標記清理后碎片要不要整理、復制清理和標記清理有有什么優(yōu)劣勢等。 分析:也是看過《深入JVM虛擬機》的基本都能回答道這個程度,其實到這個程度我已經比較期待了。同樣小于10%。4.除了3外,還能講清楚串行、并行(整理/不整理碎片)、CMS等搜集器可作用的年代、特點、優(yōu)劣勢,并且能說明控制/調整收集器選擇的方式。 分析:同上面2個問題的第四點。總結:刪除不使用的對象,回收內存空間;運行默認的finalize,當然程序員想立刻調用就用dipose調用以釋放資源如文件句柄,JVM用from survivor、to survivor對它進行標記清理,對象序列化后也可以使它復活。 千萬不要說網上google下,就算說也要說出自己以前遇到這樣的問題是怎么處理的,對這個知識有什么認識想法,然后可以反問下考官,這樣可以不讓技術型的考官為如何繼續(xù)話題而對你無語,呵呵。

轉自:http://jeromecen1021.blog.163.com/blog/static/18851527120117274624888/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴林左旗| 手机| 龙南县| 禹州市| 手游| 大港区| 荣昌县| 宣威市| 阿克| 花垣县| 延吉市| 盐津县| 乌鲁木齐市| 遂川县| 灵丘县| 二手房| 甘泉县| 明水县| 青河县| 湖南省| 改则县| 永仁县| 枣庄市| 靖宇县| 合川市| 琼结县| 哈巴河县| 铜梁县| 宣威市| 彰化市| 屏东市| 秭归县| 大英县| 襄城县| 镇江市| 化隆| 休宁县| 旺苍县| 宕昌县| 新泰市| 德江县|