Java程序运行机制

计算机高级语言按程序的执行方式可分为:编译型语言和解释型语言。

  编译型语言是指使用专门的编译器、针对特定的平台,将源程序编译成该平台可以执行的机器码(包括机器指令和操作数),即目标程序,编译结束后,可能还需要链接其他目标程序,最终生成可执行性程序,实现底层次的复用。编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行。但是编译型语言的程序平台依赖性强,当移植到其他平台上时需要重新编译。这类语言现有C ,C++,FORTRAN,Pascal等。

  解释型语言是指使用专门解释器对源程序逐行解释成特定平台上的机器码,它将编译和解释混合在一起同时来完成,每次执行解释性语言的程序都要进行一次编译,因此效率比较低,但有个优点就是跨平台性好,只有要提供特定平台的解释器,就可解释成该平台上的机器指令。现有的Ruby,Python等语言都是解释性语言。

  java是一种特殊的高级语言, 它既是编译型语言又是解释型语言,需要先编译后解释。首先由编译器编译成与平台无关的字节码(也就是.class文件),当然,这个字节码时不可执行的,必须用java解释器来解释执行。java语言里谁来负责解释执行字节码文件呢——java虚拟机(JVM),所有平台上JVM向编译器提供接口,编译成虚拟机能够理解字节码,然后由虚拟机来解释执行。

  

  当使用Java编译器编译java程序时,生成与平台无关的字节码,它不需要面向特定平台,而只面向JVM。不同平台的JVM不同,但他们提供了相同的接口。JVM是java跨平台的关键部分。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-20 00:30:17

Java程序运行机制的相关文章

java入门(1) 程序运行机制及运行过程

首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. 2.对于不同的平台,有不同的虚拟机. 3.java虚拟机机制屏蔽了底层运行平台的差别,实现了"一次编译,随处运行". 垃圾收集机制(Garbage collection) 1.不再使用的内存空间应回收--垃圾收集 2.Java语言相对于C/C++而言消除了程序员回收无用内存空间的责任:提供

《Java 开发从入门到精通》—— 2.4 Java的运行机制

2.4 Java的运行机制 知识点讲解:光盘:视频PPT讲解(知识点)第2章Java的运行机制.mp4 Java语言是一种特殊的高级语言,它不但有解释性语言的特征,也有编译性语言的特征,我们需要先编译Java程序,然后解释运行Java程序.在本章2.2节的内容中,通过一段Java程序了解了编译并运行Java程序的基本方法.我们只是从表面上了解了Java程序的编译和运行流程,为了加深对Java的理解,在本节将从根本上讲解Java程序的运行机制. 2.4.1 编译型/解释型运行机制 高级语言有两种执

求帮助,java程序运行一半运行不下去了

问题描述 求帮助,java程序运行一半运行不下去了 public class main { public static void main(String[] args){ Index ui = new Index(); ui.index(); }} import java.util.Scanner;public class Index { Scanner scanner = new Scanner(System.in); management management = new managemen

求java swing运行机制

问题描述 求java swing运行机制 我自己写了一个非常基本的jframe的demo,什么控件都不加的时候,界面可以正常出来,但是一加控件,按钮,jlable之类的,就界面就出不来,所以想了解一下gui加载的机制,看看问题出在哪里 解决方案 gui的机制还真说不好,你要是加了控件显示不出来,肯定是你写的代码有问题,放上来可以讨论下. 解决方案二: java运行机制Java运行机制Java语言的运行机制 解决方案三: gui的机制还真说不好,你要是加了控件显示不出来,肯定是你写的代码有问题,放

下面的java程序运行时为什么没有结果

问题描述 下面的java程序运行时为什么没有结果 package sql; import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; class liaotian extends JFrame implements ActionListener{ JPanel jpanel1; TextArea textArea1; TextField textField3; JButton jBut

初学java程序运行异常

问题描述 初学java程序运行异常 第一个文件StaticMain.java public class StaticMain{ public static void main(String[] args){ System.out.println("-------------"); for(String arg:args){ System.out.println(arg); } } } 第二个文件StaticMainRef.java import java.lang.reflect.Me

java程序 不能运行-.java程序运行中出现的问题

问题描述 .java程序运行中出现的问题 为什么相同我在eclipse上运行java程序的时候只有run configurations选项而没有run Application选项,我的java刚入门,提的问题比较低级,请各位大神多多指教,非常感谢! 解决方案 没有run Application(运行应用)选项,很明显,你的文件里面没有Main函数,Main函数是程序的入口和出口,没了Main函数自然不能启动程序的.看看你的文件里面有没有:`public static void main(Stri

matlab java-为什么我在matlab上写的程序打成jar包 导入java程序运行就出错

问题描述 为什么我在matlab上写的程序打成jar包 导入java程序运行就出错 package testGraph; //import paintgraph.MatlabPaint; import com.mathworks.toolbox.javabuilder.MWException; import toAdd.Adds; public class TestPaint { /** * @param args */ public static void main(String[] args

java程序运行时内存分配详解_java

一. 基本概念    每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈.进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享.Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会初始化这个对象中变量.虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也