Java代码从编译到执行


代码编译:从源代码转换为机器能够识别的机器语言或者汇编语言,是一个翻译代码的过程

对于Java代码来说,是对于一个java类的编译,利用java编译器(javac.exe)将源码编译成能够被JVM的类加载器加载的.class文件(字节码),字节码不是机器码,是一个中间代码,与平台无关。java编译一个类的时候,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则,直接引用。如果Java编译器在指定目录下找不到依赖类,就会报错。

通常的javac编译器指的是前端编译器,详细过程参考:http://blog.csdn.net/shaozengwei/article/details/38659569。代码经过前端编译之后,需要在JVM上进一步将字节码转化为机器码。

Java的编译器与虚拟机的关系:java的编译需要安装JDK环境,而运行需要安装JRE。虚拟机是可以运行编译之后的字节码的环境。JVM是Java代码的跨平台的基础。

一般的语言,如C,代码的编译是针对平台的,针对某一平台编译之后的字节码不能在其他平台上使用,跨平台需要多次编译。而Java为了实现跨平台性,用JVM屏蔽了具体的与平台有关操作系统信息。JVM有自己的硬件架构:处理器、堆栈、寄存器等等,使得Java代码只需编译成能够在JVM上运行的字节码即可。

JVM负责运行字节码:把每一条需要运行的字节码交给解释器,翻译成机器码,然后由解释器执行。

JVM解释器执行代码的过程包括:加载、校验、执行三部分。

加载:由类装载器(classLoader)完成,不仅装载当前类,而且需要载入当前类的引用类。本地类加载之后处于同一内存中,每一个类有自己的命名空间。

校验:由字节码校验器完成,校验的内容包括操作数栈溢出、非法数据类型转换等等

执行:如果字节码通过校验,将.class转化为机器码开始执行。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值