JVM实战与原理--前言及索引
JVM實(shí)戰(zhàn)與原理
?
大綱
在Java入門課中,我們編寫HelloWorld.java文件,用命令行運(yùn)行javac后生成HelloWorld.class,之后用java命令運(yùn)行HelloWorld.class文件,從而在控制臺打印出HelloWorld.
在這幾步中,你應(yīng)該提出以下幾個(gè)問題
1. 為什么需要用javac來生成.class文件?
2. .class文件是什么?
3. 為什么用java命令運(yùn)行.class文件后,就能開始執(zhí)行代碼?
4. 運(yùn)行過程中,我們在.java文件中定義的變量、實(shí)例、方法是怎么被存儲(chǔ)和調(diào)用的?
5. 內(nèi)存中存儲(chǔ)的數(shù)據(jù)是如何被回收的?
了解了JVM,我們就對上面的問題有答案了
我們按以下順序進(jìn)行敘述
JVM實(shí)戰(zhàn)與原理---編譯
JVM實(shí)戰(zhàn)與原理---class文件結(jié)構(gòu)
JVM實(shí)戰(zhàn)與原理---類加載機(jī)制
JVM實(shí)戰(zhàn)與原理---內(nèi)存區(qū)域分配
JVM實(shí)戰(zhàn)與原理---內(nèi)存回收策略
JVM實(shí)戰(zhàn)與原理---字節(jié)碼執(zhí)行引擎
?
啟用虛擬機(jī),虛擬機(jī)通過設(shè)計(jì)的參數(shù)對內(nèi)存進(jìn)行分配。
java文件通過編譯器生成Class文件,虛擬機(jī)通過雙親委派機(jī)制對類進(jìn)行加載,加載的類元信息放入方法區(qū),同時(shí)在堆生成對應(yīng)的Class對象
虛擬機(jī)啟用多個(gè)任務(wù)線程,包含
Main線程:用于執(zhí)行main方法
Attach Listener 、Signal Dispatcher:用于接收并執(zhí)行JVM命令
Finalizer線程:在垃圾收集前,調(diào)用對象的finalize()方法
Main線程會(huì)執(zhí)行main方法,此時(shí)main方法會(huì)生成對應(yīng)的棧幀,并入棧。
如果main方法中實(shí)例化對象,則堆中會(huì)存儲(chǔ)該實(shí)例對象,堆空間會(huì)通過垃圾收集器進(jìn)行垃圾收集
如果main方法中調(diào)用了方法,則會(huì)生成對應(yīng)棧幀入棧
如果main方法中啟用了新線程,則會(huì)生成新的棧與PC
?
總結(jié)
以上是生活随笔為你收集整理的JVM实战与原理--前言及索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php安装mem+cache扩展,安装m
- 下一篇: 技术博客-索引