三瘦黑、JVM
1.JVM堆的基本結(jié)構(gòu)。
堆可以細(xì)分為:新生代(Young Generation ) 和老年代(Tenured Generation) ;
也可分為: Eden空間,F(xiàn)rom Survivor 空間幸斥、 To Survivor空間匹摇;
2.JVM的垃圾算法有哪幾種?CMS垃圾回收的基本流程甲葬?
- 引用計(jì)數(shù)法(簡(jiǎn)單高效廊勃,但是無(wú)法處理循環(huán)引用,jvm中不采用)
- 可達(dá)性分析算法
- 標(biāo)記清除算法
- 復(fù)制算法
- 標(biāo)記整理算法
CMS(Concurrent Mark Sweep)基本流程:
- 初始標(biāo)記
- 并發(fā)標(biāo)記
- 重新標(biāo)記
- 并發(fā)清除
3.JVM有哪些常用啟動(dòng)參數(shù)可以調(diào)整经窖,描述幾個(gè)坡垫?
參數(shù)名 | 使用說(shuō)明 |
---|---|
Xms | 設(shè)置 Java 堆的初始化大小 |
Xmx | 設(shè)置 Java 堆最大值大小 |
Xss | 設(shè)置Java虛擬機(jī)棧大小 |
Xmn | 設(shè)置年輕代大小 |
-XX:PermSize | 設(shè)置持久代(perm gen)初始值 |
-XX:MaxPermSize | 設(shè)置持久代最大值 |
4.如何查看JVM的內(nèi)存使用情況?
在jdk的bin目錄下有
jstat.exe jconsole.exe jvisualvm.exe 等工具可以查看內(nèi)存狀況
5.Java程序是否會(huì)內(nèi)存溢出画侣,內(nèi)存泄露情況發(fā)生冰悠?舉幾個(gè)例子。
創(chuàng)建一個(gè)大數(shù)組就會(huì)內(nèi)存溢出:long[] arr=new long[102410241024];
不關(guān)資源配乱,比如數(shù)據(jù)庫(kù)連接溉卓,打開的文件等,就會(huì)出現(xiàn)內(nèi)存泄漏搬泥。
6.你常用的JVM配置和調(diào)優(yōu)參數(shù)都有哪些桑寨?分別什么作用?
參考第3題
7.JVM的內(nèi)存結(jié)構(gòu)忿檩?
由所有線程共享:方法區(qū)尉尾,堆。
線程隔離的數(shù)據(jù)區(qū): 虛擬機(jī)棧燥透,本地方法棧代赁,程序計(jì)數(shù)器。
8.常用的GC策略兽掰,什么時(shí)候會(huì)觸發(fā)YGC芭碍,什么時(shí)候觸發(fā)FGC?
設(shè)置安全點(diǎn)孽尽,安全區(qū)域窖壕。
JVM的YGC&FGC
YGC :對(duì)新生代堆進(jìn)行GC。頻率比較高杉女,因?yàn)榇蟛糠謱?duì)象的存活壽命較短瞻讽,在新生代里被回收。性能耗費(fèi)較小熏挎。
FGC :全堆范圍的GC速勇。默認(rèn)堆空間使用到達(dá)80%(可調(diào)整)的時(shí)候會(huì)觸發(fā)FGC。以我們生產(chǎn)環(huán)境為例坎拐,一般比較少會(huì)觸發(fā)FGC烦磁,有時(shí)10天或一周左右會(huì)有一次养匈。
對(duì)YGC的 觸發(fā)時(shí)機(jī),相當(dāng)?shù)娘@而易見都伪,就是eden空間不足呕乎, 這時(shí)候就肯定會(huì)觸發(fā)ygc
對(duì)于FGC的觸發(fā)時(shí)機(jī), old空間不足陨晶, 和perm的空間不足猬仁, 調(diào)用system.gc()這幾個(gè)都比較顯而易見,就是在這種情況下先誉, 一般都會(huì)觸發(fā)GC湿刽。
目錄列表
一、數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)
二褐耳、Java基礎(chǔ)
三叭爱、JVM
四、多線程/并發(fā)
五漱病、Linux使用與問(wèn)題分析排查
六买雾、框架使用
七、數(shù)據(jù)庫(kù)相關(guān)
八杨帽、網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)編程
九漓穿、Redis等緩存系統(tǒng)/中間件/NoSQL/一致性Hash等
十、設(shè)計(jì)模式與重構(gòu)
本文是針對(duì)知乎文章《成為Java頂尖程序員注盈,先過(guò)了下面問(wèn)題》的解答