java代码执行流程
来源:互联网 发布:扫描线填充算法 编辑:程序博客网 时间:2024/06/07 20:13
计算机分为运算器,控制器,存储器,输入设备和输出设备五个部分.
CPU包括运算器和控制器;存储器包括cache,内存和外存(硬盘).
各个部件由总线连接,包括地址总线,数据总线,控制总线.
整体的执行流程如下:
(1) 上电,由晶振电路产生时序电路,作为计算机的脉搏,此后,每个时序边沿到来,都会驱动数字电路进行运算.
(2) 点击Rst,系统复位,在时序电路的触发边沿,将一个地址放到程序计数器,这个地址就是主板bios中的固定程序的首地址
(3) cpu将bios程序的第一行放入到指令寄存器,开始执行代码,
(4) bios完成系统初始化,并加载系统的bootloader到内存,执行完毕后,跳转到bootloader开始执行
(5) bootloader做一系列初始化,将OS调入,开始执行操作系统代码.
指令代码执行流程:
再来研究一下java代码的执行流程,先写一个测试类:
package com.pulma.test.codepactice;public class Main { public static void main(String[] args) { compute(); } public static void compute() { int a = 1; int b = 2; int c = a + b; System.out.println(c); }}
将代码反编译成字节码:
Compiled from "Main.java"public class com.pulma.test.codepactice.Main extends java.lang.Object SourceFile: "Main.java" minor version: 0 major version: 50 Constant pool:const #1 = Method #6.#16; // java/lang/Object."<init>":()Vconst #2 = Method #5.#17; // com/pulma/test/codepactice/Main.compute:()Vconst #3 = Field #18.#19; // java/lang/System.out:Ljava/io/PrintStream;const #4 = Method #20.#21; // java/io/PrintStream.println:(I)Vconst #5 = class #22; // com/pulma/test/codepactice/Mainconst #6 = class #23; // java/lang/Objectconst #7 = Asciz <init>;const #8 = Asciz ()V;const #9 = Asciz Code;const #10 = Asciz LineNumberTable;const #11 = Asciz main;const #12 = Asciz ([Ljava/lang/String;)V;const #13 = Asciz compute;const #14 = Asciz SourceFile;const #15 = Asciz Main.java;const #16 = NameAndType #7:#8;// "<init>":()Vconst #17 = NameAndType #13:#8;// compute:()Vconst #18 = class #24; // java/lang/Systemconst #19 = NameAndType #25:#26;// out:Ljava/io/PrintStream;const #20 = class #27; // java/io/PrintStreamconst #21 = NameAndType #28:#29;// println:(I)Vconst #22 = Asciz com/pulma/test/codepactice/Main;const #23 = Asciz java/lang/Object;const #24 = Asciz java/lang/System;const #25 = Asciz out;const #26 = Asciz Ljava/io/PrintStream;;const #27 = Asciz java/io/PrintStream;const #28 = Asciz println;const #29 = Asciz (I)V;{public com.pulma.test.codepactice.Main(); Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 3: 0public static void main(java.lang.String[]); Code: Stack=0, Locals=1, Args_size=1 0: invokestatic #2; //Method compute:()V 3: return LineNumberTable: line 6: 0 line 7: 3public static void compute(); Code: Stack=2, Locals=3, Args_size=0 0: iconst_1 1: istore_0 2: iconst_2 3: istore_1 4: iload_0 5: iload_1 6: iadd 7: istore_2 8: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream; 11: iload_2 12: invokevirtual #4; //Method java/io/PrintStream.println:(I)V 15: return LineNumberTable: line 10: 0 line 11: 2 line 12: 4 line 13: 8 line 14: 15}
每个平台有不同的JVM实现,例如,在X86平台,JVM就需要将iadd等字节码指令翻译成cpu可以识别的指令,然后按照前述的指令执行步骤,进行执行,就可以实现代码的运行了.
附:java框架师之路相关资料
1 0
- java代码执行流程
- Java代码执行流程
- 代码执行流程
- springmvc执行流程代码
- 黑马程序员--Java编程之代码执行的流程控制
- java代码编译和执行的整个流程
- Java 控制执行流程
- java控制执行流程
- java中的执行流程
- java 控制执行流程
- java控制执行流程
- JAVA 程序执行流程
- Peercast核心代码执行流程
- Peercast核心代码执行流程
- Android之代码执行流程
- Java中异常执行流程
- JAVA 控制执行流程笔记
- java之控制执行流程
- git使用(上)
- 黑马程序员——C语言——运算符
- jQuery中this与$(this)的区别
- Android各种功能分析之一《版本更新检查》
- windows下sklearn的安装
- java代码执行流程
- iOS开发-进阶:NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- CentOS 操作指令-1
- iOS开发-工具:用CornerStone配置SVN,HTTP及svn简单使用说明
- python 利用time模块获取当前 日期时间
- Android视频:Android_JNI 从入门到精通
- 快速幂
- qmake
- iOS开发-UI控件:日历选取控件