Java编译原理
1、Java编译过程与c/c++编译过程不同
Java编译程序将java源程序编译成jvm可执行代码--java字节码.
Java在编译过程中一般会按照以下过程进行:
(1)JDK根据编译参数encoding确定源代码字符集.如果不指定该参数,系统会根据操作系统的file.encoding参数来获取操作系统编码格式,国内的windows通常都是GBK.
(2)JDK根据上面的字符集信息,将源文件编译成JAVA内部的unicode模式,并将编译后的内容保存到内存中.
(3)JDK将内存保存完好的内存信息写入.class文件,生成最后的二进制文件.
很多人会发现自己在IDE中配置了源文件字符集为UTF-8(与操作系统默认字符集不同)后,再直接运行javac就会出现错误,这就是因为不加encoding参数的编译过程中会默认使用系统的字符集的。在windows中默认为GBK。IDE中进行编译时,IDE会在编译参数中增加该参数.
如果你使用ant来进行编译活动,那么请你确认你的源代码的字符集,然后再相应的ant编译任务中,增加encoding参数
这就意味着, 如果你之前的项目采用的是系统默认的字符集(GBK)来编辑你的源代码,那么如果你改用UTF-8,这就意味你需要重新修改ant脚本,重新打包你的产品。
c/c++编译过程:
当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。
Java编译过程:
Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了java的可移植性和安全性。
2、jvm工作原理
运行jvm字符码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行。
装入代码的工作由“类装载器classloader”完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调
用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机的所有类都在同一地址空间中,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。
当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内布局,java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码的非法访问。
随后,被装入的代码由字节码校验器进行检查。校验器可以发现操作数栈溢出、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。
java字节码的执行有两种方式:
1)即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。
2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。
分享到:
相关推荐
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...
做了这么久反编译,发觉很多时候反编出来的文件都有错,需要多种反编译来对比还原。因此现在将多种反编译软件集合起来
可以将java编译后的class文件或者jar包反编译出来,看到编译前的代码
JAVA反编译 JAVA反编译JAVA反编译
java反编译 java 反编译 java反编译 java 反编译 java反编译 java 反编译 java反编译 java 反编译 java反编译 java 反编译
java 编译原理
java反编译软件java反编译软件java反编译软件
java 编译 jar 包 编译的命令 可以打包,和解包操作的命令
选择java编译好的class文件,反向生成java文件,有需要的希望能帮助到
1.java反编译工具 2.绿色版占用内存少 3.好用,值得下载
JAVA反编译插件文件
优点:本程序不需要用户手动敲击CMD命令,只需在图形界面上用鼠标点击即可方便地编译Java源程序,并可自定义class文件的存储位置。同时,在用户点击编译、运行等按钮时,会自动生成相应的CMD命令并通过对话框显示...
java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译...
JAVA反编译软件(可将class文件反编译为java文件)
java反编译java反编译java反编译java反编译java反编译java反编译
java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译
java编译软件
java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译
jd-gui ,java Class反编译工具 ,java jar反编译工具。经济实惠只要1分。这个是在凑字数。这个是在凑字数。这个是在凑字数。