『壹』 java程序運行的五個步驟
1、Java程序從源文件創建到程序運行要經過兩大步驟:1、源文件由編譯器編譯成位元組碼(ByteCode) 2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言("semi-interpreted" language)。
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點像make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變數名等等)以及符號引用(方法引用,成員變數引用等等);方法位元組碼放的是類中各個方法的位元組碼。
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
2、下面是程序運行的詳細步驟:
在編譯好java程序得到Main.class文件後,在命令行上敲java Main。系統就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為Main.class的二進制文件,將Main的類信息載入到運行時數據區的方法區內,這個過程叫做Main類的載入。
然後JVM找到Main的主函數入口,開始執行main函數。
main函數的第一條命令是Animal animal = new Animal("Puppy");就是讓JVM創建一個Animal對象,但是這時候方法區中沒有Animal類的信息,所以JVM馬上載入Animal類,把Animal類的類型信息放到方法區中。
載入完Animal類之後,Java虛擬機做的第一件事情就是在堆區中為一個新的Animal實例分配內存, 然後調用構造函數初始化Animal實例,這個Animal實例持有著指向方法區的Animal類的類型信息(其中包含有方法表,java動態綁定的底層實現)的引用。
當使用animal.printName()的時候,JVM根據animal引用找到Animal對象,然後根據Animal對象持有的引用定位到方法區中Animal類的類型信息的方法表,獲得printName()函數的位元組碼的地址。
開始運行printName()函數。
『貳』 程序語言底層是怎麼實現的
你好, 對於你的問題:
1、C++和Java都是面向對象編程語言(OOP),介面是OOP的一個特色,而函數是任何編程語言無論是面向過程還是面向對象都有的。
2、關於語句底層如何實現,你應該看過編程教材的第一章,一般在書籍開頭都會介紹程序時有何而來,在你編寫完程序代碼後,都會經過編譯、鏈接這個過程,這些就是將你的代碼進行轉換並最終生成可執行程序的過程,這些由IDE(開發工具)和編譯器(如Java的JDK)來共同完成,內部的細節是自動完成的。
3、要了解底層代碼實現,建議你去學習「編譯原理」這門知識
4、要學習控制CPU和內存存儲,建議去學習「計算機操作系統」這門知識(不是如何使用操作系統,是如何設計操作系統)
PS:除非你是非常喜歡或者就想做底層開發(如操作系統開發),一般應用程序開發只要學好相應的語言和類庫即可!
有其他問題歡迎咨詢!
『叄』 到底JAVA的底層是什麼
java底層,匯編啊。。
有部分庫(比如渲染等需要高速運算的)可能是C/C++
而且,這個,java底層這個概念。本來就存在某些問題。因為java是解釋型語言啊,應該問他的編譯器是啥語言實現的。
『肆』 java的"一次編譯,到處運行"的機制是如何實現的
JVM是一個java虛擬機,所謂的java虛擬機就是和普通的虛擬機一樣,擁有自己的CPU,RAM之類的。我們所使用的操作系統是Windows的操作系統,Windows操作系統支持的可執行文件是EXE文件,也就是說在Windows的操作系統上只有EXE的文件是可以直接被操作系統解釋為底層機器語言並進行運行的。而java虛擬機可以支持的是.class的可執行文件,在java的虛擬機中遇到.class的文件就可以直接翻譯成java虛擬機所能是別的底層機器語言並進行執行。這就是JVM的機制,正是因為java的這種機制才實現了java的跨平台,在不同的平台上安裝能夠在相應平台上運行的虛擬機,然後在java虛擬機中運行java的源程序,「一次編譯,多次執行」就此實現了。
所以java的跨平台是離不開虛擬機的支持的。虛擬機充當著java源程序和操作系統之間的中間,不同的操作系統只需要尋找相應的中介就可以實現在不同的操作系統上運行。而java的編譯只是吧.java文件編譯為.class位元組碼文件而已,然後把位元組碼交給虛擬機去執行。
虛擬機在執行的時候是讀一句位元組碼文件人後解釋一句給操作系統聽,這就是為什麼java是解釋型的語言。
所謂的編譯型的語言是指這種語言被編譯之後生成的是可以直接供操作系統執行的010101文件,像C,C++都是編譯型的,java因為中間有JVM這么個東西所以是解釋型的。
『伍』 Java的底層是用什麼語言寫的
JVM 的話是 C++ 實現的。而c++則需要考慮效率,任何在windows下運行的程序,底層都是C/C++或者ASM,這是硬體指令系統決定的。
Java 類庫是 Java 實現的。java主要面向於實現。