
计算机可以直接执行的程序是机器语言形成的。
机器语言是计算机可以直接识别,不需要进行任何翻译的语言。每台机器的指令,其格式和代码所代表的含义都是硬性规定的,故称之为面向机器的语言,也称为机器语言。它是第一代的计算机语言,机器语言对不同型号的计算机来说一般是不同的。
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如, *** 作码字段和地址码字段,其中 *** 作码指明了指令的 *** 作性质及功能,地址码则给出了 *** 作数或 *** 作数的地址。机器语言是微处理器理解和使用的,用于控制它的 *** 作二进制代码。
Java程序的运行机制可以分为以下几个步骤:
编写Java源代码:首先,程序员需要使用Java编程语言编写源代码。Java源代码是以.java为扩展名的文本文件,包含了Java程序的逻辑和功能。
编译Java源代码:Java源代码需要通过Java编译器进行编译,生成字节码文件。字节码文件是以.class为扩展名的二进制文件,包含了Java程序的指令、变量和方法。
解释执行字节码文件:Java虚拟机(JVM)负责解释执行字节码文件。JVM是一个虚拟的计算机,它模拟了实际计算机的硬件和 *** 作系统,能够运行字节码文件。
类加载:当Java程序被执行时,JVM会根据需要动态加载所需的类。Java类库和自定义类都会被加载到内存中。
执行Java程序:JVM会按照程序的逻辑和功能执行Java程序。程序员可以在程序中使用Java类库和自定义类提供的方法和变量。
垃圾回收:JVM还负责垃圾回收,它会自动回收不再使用的内存空间,防止程序出现内存泄漏等问题。
总的来说,Java程序的运行机制可以概括为:编写源代码 ->编译生成字节码文件 ->解释执行字节码文件 ->加载所需类 ->执行Java程序 ->垃圾回收。
一、编译时与运行时的内存情况1.编译时不分配内存
编译时是不分配内存的。此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确。所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误。
2.运行时必分配内存
运行时程序是必须调到“内存”的。因为CPU(其中有多个寄存器)只与内存打交道的。程序在进入实际内存之前要首先分配物理内存。
3.编译过程
只能简单说一下,因为如果要详细的话,就是一本书了《编译原理》。编译器能够识别语法,数据类型等等。然后逐行逐句检查编译成二进制数据的obj文件,然后再由链接程序将其链接成一个EXE文件。此时的程序是以EXE文件的形式存放在磁盘上。
4.运行过程
当执行这个EXE文件以后,此程序就被加载到内存中,成为进程。此时一开始程序会初始化一些全局对象,然后找到入口函数(main()或者WinMain()),就开始按程序的执行语句开始执行。此时需要的内存只能在程序的堆上进行动态增加/释放了。
各区段功能说明:
1、程序代码区:存放函数体的二进制代码。
2、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。
3、文字常量区 :常量字符串就是放在这里的。 程序结束后由系统释放。
4、堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
5、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 *** 作方式类似于数据结构中的栈。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)