jvm是如何實現的?
編程語言和自然語言類似,都是為了交流,自然語言用于跟人交流,程序語言則用于指示機器。jvm其實也就是一個程序,這個程序能接受你的Java代碼,然后根據你的意愿執行一系列操作。舉個例子,你可以寫一個這樣的程序,這個程序接受用戶輸入一句話,如果用戶輸入“beep”則調用機器的鳴叫,如果用戶輸入“exit”,則關掉本程序。在這個例子中,其實用戶寫的“beep”和“exit”就充當了程序語言的角色,只不過這門語言過于簡單因此不可能普及。而java則具有完善的體系能夠支持你表達任何意愿,然后jvm理解你的java語言并執行相應操作,這就是程序語言的原理。當然java還有優化的方案,它的編譯器將你的java語言翻譯成字節碼,因為jvm執行字節碼的速度比直接理解java代碼要快很多,后來的版本還引入了JIT技術,實時將字節碼再編譯成機器碼,這樣就能讓機器直接執行指令而不需要jvm去解釋。至于垃圾收集器,就是jvm維護著每一個對象的引用(可以理解成C++里面的指針),根據一定的算法判斷其是否可達,如果這個引用不可達(也就是程序的后續部分已經無法獲取這個引用,比如說已超出block范圍了)那么就清除這個內存對象。這樣的好處是能避免由于程序員的疏忽引起的內存泄露,缺點是內存的清理不夠即時,因而無用的對象常常會占據內存很長時間。你也可以在C++里實現垃圾回收器,思路是寫一個用于管理內存的類,然后程序里不再用new來新建對象,而是用這個類來產生對象,類內部擁有這個對象的指針,并在適當的時候delete它,這樣就實現垃圾自動回收了,當然要寫這樣一個類是很困難的事。