從Java的角度來說,Java這種語言的應(yīng)用主要是在高層應(yīng)用。Java的語法總體而言比較簡單,封裝機(jī)制比較完善,這些簡單性就是為了使開發(fā)者能把精力集中在業(yè)務(wù)流方面,而不是語言本身方面。Java的這種特性使得了解Java底層機(jī)制并不能對(duì)你應(yīng)用Java產(chǎn)生太大的幫助。做Java的人更應(yīng)該去關(guān)心一些軟件工程相關(guān)的問題,而不是拘泥于底層實(shí)現(xiàn)機(jī)制。而且由于Java本身并不復(fù)雜,且很少涉及直接硬件編程,因此只要有一定的Java程序設(shè)計(jì)經(jīng)驗(yàn),一般都能體會(huì)到其內(nèi)部實(shí)現(xiàn)的大致情況,例如堆棧大體上如何布局等,這已經(jīng)足夠了,你再去詳細(xì)了解每一個(gè)細(xì)節(jié),并不能幫助你把程序?qū)懙煤煤芏唷?/p>
我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、海林ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的海林網(wǎng)站制作公司
從一個(gè)所有語言通用的觀點(diǎn)來說,了解一個(gè)語言的編譯細(xì)節(jié),是要建立在對(duì)語言本身一定理解的基礎(chǔ)之上的。當(dāng)一個(gè)具有鉆研精神的程序員具備了這樣的基礎(chǔ)之時(shí),他自然而然會(huì)去了解更深入的細(xì)節(jié)。新手的很多“有沒有用,該不該學(xué)”的問題,恰恰是反映了他們還沒有具備那樣的學(xué)習(xí)基礎(chǔ),新手需要的不是一步登天的想法,而是踏踏實(shí)實(shí)把基礎(chǔ)打牢的決心。而且了解編譯細(xì)節(jié)也并非只是知道“每句語言對(duì)應(yīng)了哪句匯編代碼”那么簡單的,這是一個(gè)非常復(fù)雜的學(xué)習(xí)過程,需要相當(dāng)?shù)幕竟Γň幾g原理、計(jì)算機(jī)組成原理、接口原理、操作系統(tǒng)原理等等計(jì)算機(jī)專業(yè)里最復(fù)雜的課程內(nèi)容。而且對(duì)于高級(jí)語言而言,也并不存在一個(gè)你所想象中的匯編和語句的一一對(duì)應(yīng)關(guān)系。
最后,還想澄清一些概念。嚴(yán)格意義上說,Java不屬于編譯型語言,因?yàn)镴ava的“編譯器”僅僅是將Java代碼翻譯成字節(jié)碼,而不是機(jī)器碼。字節(jié)碼通過虛擬機(jī)轉(zhuǎn)變?yōu)楸镜貦C(jī)器指令。研究這些底層代碼一般有幾種目的,一是逆向工程,二是加深對(duì)語言理解,以期寫出更好的代碼,三是編譯理論的研究者改進(jìn)編譯過程。我前面已經(jīng)分析過,對(duì)于Java這種語言而言,第二個(gè)目的并不是一個(gè)正確的方向,至少不是一個(gè)有效的方向。而第三個(gè)目的則遠(yuǎn)遠(yuǎn)不是一般人所能企及的,這里面有個(gè)人能力的原因,也有制度方面的原因(所以你所說的“改進(jìn)Java”只能作為一種業(yè)余愛好意義上的改進(jìn),并不具有實(shí)踐上意義,除非有一天你能進(jìn)入具有發(fā)言權(quán)的大型公司或組織,并成為其中的核心技術(shù)人員)。研究Java字節(jié)碼一般是基于第一個(gè)目的,即逆向工程。而至于說研究虛擬機(jī)怎樣把字節(jié)碼編程本地指令,則一般是虛擬機(jī)設(shè)計(jì)人員研究的問題,Java程序員去研究的話,意義也不大。
我不知道說了這么多有沒有把問題講清楚。
匯編是除了機(jī)器語言外的最底層的語言,java是面向?qū)ο蟮恼Z言,是屬于最高級(jí)的語言之一了,與匯編語言差的太多。完全不是同一個(gè)東西,連相似的地方都幾乎沒有。
至于java的底層是用什么實(shí)現(xiàn)的就不好說了,估計(jì)java 的底層應(yīng)該也是使用的與匯編相似的語言寫的,那么多復(fù)雜的類應(yīng)該會(huì)有一種比較高效的機(jī)制來處理。
下面有幾種方法:
方法一:生成asm文件
1)VS2005:
項(xiàng)目 ---》屬性 ---》 配置屬性 ---》 c/c++ ---》 輸出文件 ---》 右邊內(nèi)容項(xiàng):匯編輸出 ---》帶源代碼的程序集(/FAs )。
這樣在項(xiàng)目里面生成后綴為*.asm 的文件。里面還有注釋,有利于分析。
要得到匯編代碼與源代碼的對(duì)應(yīng),設(shè)置選項(xiàng):
2)VC6.0:
project settings:
--- C++
--- category == Listing files
---Listing file type == Assembly with source code
方法二:使用反匯編方式(推薦使用這種方法,在debug的時(shí)候使用)
1)VC6.0在進(jìn)行斷點(diǎn)調(diào)試的時(shí)候,進(jìn)行以下步驟:
點(diǎn)擊“查看”
“調(diào)試窗口”
“Disassably”
即可查看到反匯編的結(jié)果
2)VS2005在進(jìn)行斷點(diǎn)調(diào)試的時(shí)候,進(jìn)行以下步驟:
點(diǎn)擊“調(diào)試”
“窗口”
“反匯編”
查看java就直接用javap -v 類文件.class 即可。詳細(xì)內(nèi)容可以參考 jvm虛擬機(jī)
網(wǎng)站題目:java查看匯編代碼嗎 怎么查看匯編代碼
網(wǎng)頁URL:http://www.chinadenli.net/article24/doogoje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、電子商務(wù)、網(wǎng)站收錄、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)