|
Java分享JVM從哪方面入手學(xué)習(xí),無(wú)論什么級(jí)別的Java從業(yè)者,JVM都是進(jìn)階時(shí)必須邁過(guò)的坎。不管是工作還是面試中,JVM都是必考題。如果不懂JVM的話,薪酬會(huì)非常吃虧。掌握了JVM機(jī)制,就等于學(xué)會(huì)了深層次解決問(wèn)題的方法。對(duì)于Java開(kāi)發(fā)者而言,只有熟悉底層虛擬機(jī)的運(yùn)行機(jī)制,才能通過(guò)JVM日志深入到字節(jié)碼的層次去分析排查問(wèn)題,發(fā)現(xiàn)隱性的系統(tǒng)缺陷,進(jìn)而提升系統(tǒng)性能。 一些技術(shù)人員開(kāi)發(fā)工具用得很熟練,觸及JVM問(wèn)題時(shí)卻是模棱兩可,甚至連內(nèi)存模型和內(nèi)存區(qū)域,HotSpot和JVM規(guī)范,都混淆不清。工作很長(zhǎng)時(shí)間,在生產(chǎn)時(shí)還在用缺省參數(shù)來(lái)直接啟動(dòng),以致系統(tǒng)運(yùn)行時(shí)出現(xiàn)性能、穩(wěn)定性等問(wèn)題時(shí)束手無(wú)措,不知該如何追蹤排查。久而久之,這對(duì)自己的職業(yè)成長(zhǎng)是極為不利的. 學(xué)習(xí)JVM首先需要了解Java的運(yùn)行時(shí)數(shù)據(jù)區(qū)域,Java的數(shù)據(jù)區(qū)域包括程序記錄器,Java 虛擬機(jī)棧,本地方法棧,堆,方法區(qū),運(yùn)行時(shí)常量池和直接內(nèi)存.在這些內(nèi)存區(qū)域內(nèi),最為重要的是方法棧和堆內(nèi)存。 其次需要了解到對(duì)象的構(gòu)建過(guò)程,對(duì)象的內(nèi)存布局,內(nèi)存的布局包括三塊區(qū)域——對(duì)象頭、實(shí)例數(shù)據(jù)和對(duì)其填充。更為重要的是關(guān)于對(duì)象創(chuàng)建后的訪問(wèn)方式,包含句柄和直接指針的方式。在這里句柄的訪問(wèn)方式最為重要,句柄的最大好處是 reference 中存儲(chǔ)的是穩(wěn)定的句柄地址,在對(duì)象移動(dòng)(GC)是只改變實(shí)例數(shù)據(jù)指針地址,reference 自身不需要修改。直接指針訪問(wèn)的最大好處是速度快,節(jié)省了一次指針定位的時(shí)間開(kāi)銷(xiāo)。如果是對(duì)象頻繁 GC 那么句柄方法好,如果是對(duì)象頻繁訪問(wèn)則直接指針訪問(wèn)好。 最后需要了解到JVM的垃圾回收機(jī)制和內(nèi)存分配機(jī)制,需要了解到引用計(jì)數(shù)法,可達(dá)性分析法,這兩種方法是配合使用的,引用計(jì)數(shù)計(jì)算對(duì)象的引用次數(shù),而可達(dá)性分析法會(huì)分析對(duì)象的訪問(wèn)情況。在垃圾回收中,需要針對(duì)每一代的算法進(jìn)行了解,涉及到新生代的標(biāo)記-清除算法,老年代的標(biāo)記整理算法,以及分代算法。 |
|
|
來(lái)自: 好程序員IT > 《Java培訓(xùn)教程》