當前位置:首頁 » 編程軟體 » go編譯和運行需要jvm嗎

go編譯和運行需要jvm嗎

發布時間: 2022-06-25 04:24:12

① JVM的組成和運行原理是什麼

JVM是java Virtual Machine(Java虛擬機)的縮寫。

1、JVM的組成:

JVM 由類載入器子系統、運行時數據區、執行引擎以及本地方法介面組成。

2、JVM的運行原理:

JVM是java的核心和基礎,在java編譯器和os平台之間的虛擬處理器。它是一種基於下層的操作系統和硬體平台並利用軟體方法來實現的抽象的計算機,可以在上面執行java的位元組碼程序。java編譯器只需面向JVM,生成JVM能理解的代碼或位元組碼文件。Java源文件經編譯器,編譯成位元組碼程序,通過JVM將每一條指令翻譯成不同平台機器碼,通過特定平台運行。

② go語言和java比是什麼

區別:


1、Go不允許函數重載,必須具有方法和函數的唯一名稱;java允許函數重載。

2、Java默認允許多態,Go沒有。

3、Go代碼可以自動擴展到多個核心;而Java並不總是具有足夠的可擴展性。

4、Java不支持多繼承,Go支持多繼承。


什麼是go語言?


Go也稱為Golang,是一種編程語言。作為一種開源編程語言,Go可以輕松構建可靠,簡單和高效的軟體。

Go是鍵入的靜態編譯語言。Go語言提供垃圾收集,CSP風格的並發性,內存安全性和結構類型。

什麼是java?

Java是一種用於一般用途的計算機編程語言,它是基於類的,並發的和面向對象的。Java專門設計為包含很少的實現依賴項。Java應用程序在JVM(Java虛擬機)上運行。它是當今最著名和最著名的編程語言之一。

③ java編譯器和JVM有什麼區別

java編譯器把java源碼編譯成位元組碼 (.class文件).
jvm是在運行期將class文件編譯成機器碼文件.供程序運行.

④ 為什麼許多原本的 Java 項目都試圖用 go 進行重寫開源

項目推倒重構是項目開發大忌,一方面我們要盡量避免做項目推倒重構,盡量在前期就規劃好,另一方面,我們又希望項目能常做小重構,這對項目可持續性開發是很有幫助的。而語言的重構,把Java項目用Go語言重寫一遍,無疑是一次重大的推倒重來。


一、Go語言的優勢在哪裡

Go語言領先於Java的最大優勢,就在於快。Go語言會被編譯成機器代碼,直接執行;Java語言則使用JVM運行其代碼,這比Go語言要慢了很多。另外,Java語言的內存管理,相比於Go語言,也復雜得多,而內存管理,不管對於程序運行,還是對程序員的開發,都極為重要。最後,Go語言沒有引用只有指針,這比Java語言處處引用,又領先了一個身位。

⑤ Java編譯成位元組碼的階段有用到JVM嗎

應該是不需要jvm的,其實javac :即java compile ,是指java編譯,java 運行文件,其實java命令就是調用的 jvm平台,交流一下吧,這是我一直以來的看法。

⑥ 編譯器 JVM JDK JRE JSE是什麼 關系都有什麼用,都怎麼樣工作的

java是面向對象編程,一切皆對象。這個觀念要以後慢慢才能了解,無論怎麼樣講都是初學者理解不了的。所以還需要多多練習。
C語言是面向過程編程的。所以沒有「類」的概念,而java的類卻更符合人類的思維方式,C語言更符合機器的思維方式。

還有就是,千萬不要把C語言的一些概念和java混淆,這是兩種不同類型的語言,java是純的面向對像的編程語言,而C是面向過程的。以後的學習中你會發現java比C更有優勢。再重申一下,最好不要把C的概念和java做對比。你把java當作一門新的語言來學。 唯一可以借鑒C的就是語法和編程的一些基本概念如數據類型,設計模式之類的。

jvm 是java虛擬機,將java的class位元組碼文件翻譯成二進制可執行程序。
jdk 是java的開發包 java sdk, java的開發工具,包含SUN公司提供的java API,將java源碼編譯為class位元組碼文件,通常jdk中就包含了jre。
jre 是java運行時,用於執行java程序。
jse 是java標准開發,jse 就是java開發的一種,標准開發,例如開發桌面程序。

其餘的還有 javaEE, javaMe 前者是java的企業應用,後者是java的嵌入式開發,例如java手機程序。

如果netbeans能運行,說明你安裝的netbeans已經包含了JDK,而jdk里已經包含了jre和jvm,故以後就可以省心了,至於環境變數的事情,你可以去搜索一下,很簡單的配置,有個好消息告訴你,如果你是按照安裝向導操作的,向導會自動將環境變數寫進去。

java基礎類庫就是API,而你說的「庫」我不太明白是什麼意思。

jdk是開發工具包,裡麵包含 javaSE, JRE, JVM
jdk 把.java文件編譯成為.class位元組碼文件
然後JRE調用JVM將位元組碼文件翻譯成可供機器執行的程序。就這樣了啊。

最後說一句: 不推薦使用Netbeans, 現在公司里都用Eclipse,這才是趨勢。

************************************8
繼續補充
angelicdemon 所說的沒錯,IDE環境會在配置文件里自己寫上jdk和jre的路徑以便找到他們。
但是經過安裝向導安裝jdk後確實會自動將java所需要的環境變數寫進系統環境變數中。再有,如果使用IDE的話 環境變數沒啥用處,只有用命令行模式編譯java源碼才會有用處。

另外: Eclipse絕對是現在公司的首選,因為公司里的項目用ECLIPSE構建的,源碼上傳到版本控制系統後,同步後,你用Netbeans打不開,還得重新構建,麻煩嗎? 再說了NB和EC還是有相當大區別的。
還有就是,這句話最重要,如果你真的是java初學者,絕對不要用IDE,用記事本+命令行 這樣才能真正掌握java的機理。 哈哈 累死我了,就寫到這吧
angelicdemon 看來也和這貼幹上了。
一會兒這貼成論文貼了
***********************************

以上回答可能有錯誤,要參考其他人的答案。

⑦ 如何讓go編譯的程序後台運行

請自行查看我前面寫得GO語言開發環境和GO語言IDE編輯器的經驗文章
我們先寫一段GO代碼
很簡單就是列印輸出一個hello world!

保存為print.go文件
然後再CMD下一路cd到print.go目錄下來

在cmd下運行 go run print.go就可以運行go程序了

看看運行結果

GO程序的代碼是可以直接編譯成exe文件的
在print.go目錄下運行 go build print.go即可把go程序編譯成exe文件

完成之後看看exe文件是否存在

最好我們要看看運行exe的效果

⑧ Go 是怎麼使用 Go 來編譯自身的

第一步:all.bash

% cd $GOROOT/src
% ./all.bash

第一步有些突兀,因為 all.bash 僅僅調用了其它兩個 shell 腳本;make.bash 和 run.bash。如果你在使用 Windows 或 Plan 9,過程是一樣的,只是腳本擴展名變成了.bat 或.rc。對於本文中的其它腳本,請根據你的系統適當改動。
第二步:make.bash

. ./make.bash --no-banner

main.bash 來源於 all.bash,因此調用退出將正確終止便宜進程。main.bash 有三個主要工作,第一個是驗證編譯 Go 的環境是否完整。完整性檢查在過去幾年中建立,它通常嘗試避免使用已知的破損工具或必然失敗的環境進行編譯。
第三步. cmd/dist

gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c

一旦可用性檢查完畢,make.bash 將編譯產生 cmd/dist,cmd/dist取代了之前存在於Go 1 之前的Makefile 編譯系統。cmd/dist用來管理少量的pkg/runtime的代碼生成。cmd/dist 是C語言編寫的程序,能夠充分利用系統C編譯器和頭文件來處理大部分主機系統平台的檢測。cmd/dist通常用來檢測主機的操作系統和體系結構,即環境變數$GOHOSTOS和$GOHOSTARCH .如果是交叉編譯的話,變數 $GOOS和$GOARCH可能會由於你的設置而不同。事實上,Go 通常用作跨平台編譯器,只不過多數情況下,主機和目標系統一致而已。接下來,make.bash 調用cmd/dist 的引導參數的支持庫、 lib9、 libbio 和 libmach,使用編譯器套件,然後用自己的編譯器進行編譯。這些工具也是用 C 語言寫的中,但是由系統 C 編譯器編譯產生。

echo "# Building compilers and Go bootstrap tool for host, $GOHOSTOS/$GOHOSTARCH."
buildall="-a"
if [ "$1" = "--no-clean" ]; then
buildall=""
fi
./cmd/dist/dist bootstrap $buildall -v # builds go_bootstrap

使用的編譯器套件 cmd/dist 編譯產生一個版本的gotool,go_bootstrap。但go_bootstrap並不是完整得gotool,比方說 pkg/net 就是孤立的,避免了依賴於 cgo。要編譯的文件的列表以及它們的依賴項,是由cmd/dist編譯的 ,所以十分謹慎地避免引入新的生成依賴項 到 cmd/go。

第四步:go_bootstrap

現在, go_bootstrap 編譯完成了,make.bash 的最後一部就是使用 go_bootstrap 完成 Go 標准庫的編譯,包括整套 gotool 的替換版。

echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std

第五步:run.bash

現在,make.bash 完成了,運行回到了 all.bash,它將引用 run.bash。run.bash 的工作是編譯和測試標准庫,運行時以及語言測試套件。

bash run.bash --no-rebuild

使用 --no-rebuild 標識是因為 make.bash 和 run.bash 可能都調用了 go install -a std,這樣可以避免重復,--no-rebuild 跳過了第二個 go install。

# allow all.bash to avoid double-build of everything
rebuild=true
if [ "$1" = "--no-rebuild" ]; then
shift
else
echo '# Building packages and commands.'
time go install -a -v std
echo
fi

第六步:go test -a std

echo '# Testing packages.'
time go test std -short -timeout=$(expr 120 \* $timeout_scale)s
echo

下一步 run.bash z則是對標准庫中的所有包進行單元測試,這是使用 testing 包編寫的。由於 $GOPATH 和 $GOROOT 中的代碼存在於同一個命名空間中,我們不能使用 go test,這可能會測試 $GOPATH 中的所有包,所以將創建別名std來標識標准庫中的包。由於有些測試需要很長時間,或耗用大量內存,測試將會通過 -short 標識將其過濾。
第七步 runtime 和 cgo 測試

run.bash的下一節將運行大量對cgo支持的平台測試,運行一些季春測試,編譯 Go 附帶的一些雜項程序。隨著時間的推移,這份雜項程序列表已經變長了,當它們發現自己並不包含在編譯過程中時,沉默將不可避免的被打破。

第八步: go run test

(xcd ../test
unset GOMAXPROCS
time go run run.go
) || exit $?

run.bash的倒數第二步調用了$GOROOT目錄下test文件夾中的編譯器和運行時測試。這其中有描述編譯器和運行時本身的低層級測試。而子目錄 test/bugs 及 test/fixedbugs 中的測試對已知問題和已解決問題進行特別的測試。所有測試的測試驅動器是 $GOROOT/test/run.go,該程序很小,它調用test文件夾中的每個.go 文件。有些 .go 文件在首行上描述了預期的運行結果,例如,程序失敗或是放出特定的輸出隊列。

第九步go tool api

echo '# Checking API compatibility.'
go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \
-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt

run.bash的最後一部將調用API工具,API工具的作用是執行 Go 1 約定;導出的符號,常數,函數,變數,類型和方法組成2012年確認的 Go 1 API。Go 1 寫在 api/go1.txt 文件,而 Go 1.1 則寫在 api/go1.1.txt文件中。另一個額外的文件,api/next.txt 描述了G 1.1自後添加到標准庫和運行時中的符號。當 Go 1.2 發布時,這個文件將會成為 Go 1.2 的約定,另一個新的 next.txt 文件也將被創建。這里還有一個小文件,except.txt,它包括 Go 1 約定中被批準的擴展。對文件的增添總是小心翼翼的。

⑨ java中將java源文件編譯成位元組碼文件這個過程是由JVM執行的嗎

不是,JVM只是執行編譯以後的位元組碼,編譯是由javac(java編譯器)執行的。

熱點內容
wemall微商城源碼 發布:2025-05-14 22:15:20 瀏覽:802
隆地優選交易密碼是什麼 發布:2025-05-14 21:53:23 瀏覽:93
強酸強鹼存儲櫃 發布:2025-05-14 21:45:16 瀏覽:563
車輛參數配置包括什麼 發布:2025-05-14 21:31:03 瀏覽:163
怎麼引入安卓項目 發布:2025-05-14 21:26:39 瀏覽:824
游戲輔編程 發布:2025-05-14 21:18:49 瀏覽:687
三菱plc一段二段密碼什麼意思 發布:2025-05-14 21:17:16 瀏覽:528
電腦開機密碼忘記了怎麼破解 發布:2025-05-14 21:09:40 瀏覽:57
pythondict格式 發布:2025-05-14 21:09:38 瀏覽:886
落葉片拍攝腳本 發布:2025-05-14 20:40:49 瀏覽:799