1、為什么JVM調(diào)優(yōu)經(jīng)常會將-Xms和-Xmx參數(shù)設置成一樣;
? 針對JVM堆的設置抑党,一般可以通過-Xms -Xmx限定其最小包警、最大值,為了防止垃圾收集器在最小底靠、最大之間收縮堆而產(chǎn)生額外的時間害晦,我們通常把最大、最小設置為相同的值
2暑中、Java內(nèi)存模型壹瘟,方法區(qū)存什么;
3鳄逾、類的基本信息稻轨、常量、靜態(tài)變量严衬、編譯后的代碼
4澄者、CMS垃圾回收過程笆呆;
5请琳、Full GC次數(shù)太多了,如何優(yōu)化赠幕;
full gc頻繁說明old區(qū)很快滿了俄精。
如果是一次fullgc后,剩余對象不多榕堰。那么說明你eden區(qū)設置太小竖慧,導致短生命周期的對象進入了old區(qū)。
如果一次fullgc后逆屡,old區(qū)回收率不大圾旨,那么說明old區(qū)太小。
6魏蔗、直接內(nèi)存如何管理的砍的;
Minor GC與Full GC分別在什么時候發(fā)生?什么時候觸發(fā)Full GC;
minorGC 針對年輕代 full gc 年輕代老年代同時進行
當Eden區(qū)滿時莺治,觸發(fā)Minor GC
Full GC觸發(fā)條件:
(1)調(diào)用System.gc時廓鞠,系統(tǒng)建議執(zhí)行Full GC,但是不必然執(zhí)行
(2)老年代空間不足
(3)方法去空間不足
(4)通過Minor GC后進入老年代的平均大小大于老年代的可用內(nèi)存
(5)由Eden區(qū)谣旁、From Space區(qū)向To Space區(qū)復制時床佳,對象大小大于To Space可用內(nèi)存,則把該對象轉(zhuǎn)存到老年代榄审,且老年代的可用內(nèi)存小于該對象大小
7砌们、GC收集器有哪些?CMS收集器與G1收集器的特點。
Serial 單線程串行進行垃圾收集浪感,復制算法
ParNew Serial 多線程版本角溃,復制算法,可以與CMS配合
Parallel 重吞吐篮撑,復制减细,多線程
SerialOld 串行 單線程 標記 整理
ParallelOld? 標記整理
CMS 標記清除? 獲取最小停頓時間,特別適合BS使用
G1 布局不是只有新生代活老年代赢笨,整個布局邏輯劃分region未蝌,G1跟蹤每個region里垃圾大小,維護優(yōu)先的列表茧妒,根據(jù)允許的收集時間萧吠,優(yōu)先收集收集價值最大的Region
年輕代一般用復制算法,老年代一般用標記--算法
9桐筏、Java在什么時候會出現(xiàn)內(nèi)存泄漏纸型;
內(nèi)存泄漏:程序申請的內(nèi)存無法釋放,始終占用空間梅忌,分配的對象可達但是無用狰腌,一般是一個很大的對象無法釋放,老年代的大對象牧氮,內(nèi)存泄漏最終會導致內(nèi)存溢出
內(nèi)存溢出:程序申請內(nèi)存時琼腔,沒有內(nèi)存空間可分配了
10、Java中的大對象如何進行存儲踱葛;
超過EDEN區(qū)一半丹莲,直接跳過年輕代進入老年代
11、rt.jar被什么類加載器加載尸诽,什么時間加載甥材;
Bootstrap Classloader
12、自己寫的類被什么加載性含,什么時間加載洲赵;
13、自己寫的兩個不同的類是被同一個類加載器加載的嗎胶滋?為什么板鬓?
14、為什么新生代內(nèi)存需要有兩個Survivor區(qū)究恤?
15俭令、幾種常用的內(nèi)存調(diào)試工具:jmap、jstack部宿、jconsole抄腔;
16瓢湃、dump日志
17、類加載的五個過程:加載赫蛇、驗證绵患、準備、解析悟耘、初始化落蝙;
18、G1停頓嗎暂幼,CMS回收步驟筏勒,CMS為什么會停頓,停頓時間旺嬉;
19管行、棧主要存的數(shù)據(jù)是什么,堆呢邪媳?
20捐顷、堆分為哪幾塊,比如說新生代老生代雨效,那么新生代又分為什么迅涮?
Eden survior 1? survior? 2
21、軟引用和弱引用的使用場景(軟引用可以實現(xiàn)緩存设易,弱引用可以用來在回調(diào)函數(shù)中防止內(nèi)存泄露)逗柴;