扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
从Java的角度来说,Java这种语言的应用主要是在高层应用。Java的语法总体而言比较简单,封装机制比较完善,这些简单性就是为了使开发者能把精力集中在业务流方面,而不是语言本身方面。Java的这种特性使得了解Java底层机制并不能对你应用Java产生太大的帮助。做Java的人更应该去关心一些软件工程相关的问题,而不是拘泥于底层实现机制。而且由于Java本身并不复杂,且很少涉及直接硬件编程,因此只要有一定的Java程序设计经验,一般都能体会到其内部实现的大致情况,例如堆栈大体上如何布局等,这已经足够了,你再去详细了解每一个细节,并不能帮助你把程序写得好很多。
我们提供的服务有:网站制作、网站设计、微信公众号开发、网站优化、网站认证、海林ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的海林网站制作公司
从一个所有语言通用的观点来说,了解一个语言的编译细节,是要建立在对语言本身一定理解的基础之上的。当一个具有钻研精神的程序员具备了这样的基础之时,他自然而然会去了解更深入的细节。新手的很多“有没有用,该不该学”的问题,恰恰是反映了他们还没有具备那样的学习基础,新手需要的不是一步登天的想法,而是踏踏实实把基础打牢的决心。而且了解编译细节也并非只是知道“每句语言对应了哪句汇编代码”那么简单的,这是一个非常复杂的学习过程,需要相当的基本功,包括编译原理、计算机组成原理、接口原理、操作系统原理等等计算机专业里最复杂的课程内容。而且对于高级语言而言,也并不存在一个你所想象中的汇编和语句的一一对应关系。
最后,还想澄清一些概念。严格意义上说,Java不属于编译型语言,因为Java的“编译器”仅仅是将Java代码翻译成字节码,而不是机器码。字节码通过虚拟机转变为本地机器指令。研究这些底层代码一般有几种目的,一是逆向工程,二是加深对语言理解,以期写出更好的代码,三是编译理论的研究者改进编译过程。我前面已经分析过,对于Java这种语言而言,第二个目的并不是一个正确的方向,至少不是一个有效的方向。而第三个目的则远远不是一般人所能企及的,这里面有个人能力的原因,也有制度方面的原因(所以你所说的“改进Java”只能作为一种业余爱好意义上的改进,并不具有实践上意义,除非有一天你能进入具有发言权的大型公司或组织,并成为其中的核心技术人员)。研究Java字节码一般是基于第一个目的,即逆向工程。而至于说研究虚拟机怎样把字节码编程本地指令,则一般是虚拟机设计人员研究的问题,Java程序员去研究的话,意义也不大。
我不知道说了这么多有没有把问题讲清楚。
汇编是除了机器语言外的最底层的语言,java是面向对象的语言,是属于最高级的语言之一了,与汇编语言差的太多。完全不是同一个东西,连相似的地方都几乎没有。
至于java的底层是用什么实现的就不好说了,估计java 的底层应该也是使用的与汇编相似的语言写的,那么多复杂的类应该会有一种比较高效的机制来处理。
下面有几种方法:
方法一:生成asm文件
1)VS2005:
项目 ---》属性 ---》 配置属性 ---》 c/c++ ---》 输出文件 ---》 右边内容项:汇编输出 ---》带源代码的程序集(/FAs )。
这样在项目里面生成后缀为*.asm 的文件。里面还有注释,有利于分析。
要得到汇编代码与源代码的对应,设置选项:
2)VC6.0:
project settings:
--- C++
--- category == Listing files
---Listing file type == Assembly with source code
方法二:使用反汇编方式(推荐使用这种方法,在debug的时候使用)
1)VC6.0在进行断点调试的时候,进行以下步骤:
点击“查看”
“调试窗口”
“Disassably”
即可查看到反汇编的结果
2)VS2005在进行断点调试的时候,进行以下步骤:
点击“调试”
“窗口”
“反汇编”
查看java就直接用javap -v 类文件.class 即可。详细内容可以参考 jvm虚拟机
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流