1、java基础之java程序运行机制

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

  我们可以通过helloworld来理解这几个缩写词的具体含义:

1 public class HelloWorld {
2     public static void main(String[] args) {
3         System.out.println("helloworld");
4     }
5 }

HelloWord

  编译之后, 我们得到了HelloWorld.class(图中的"Your program‘s class files")
  在HelloWorld里面, 我们调用了 JAVA API中的 java.lang.System这个类的静态成员对象 out, out 的静态方法: public static void println(String string);

  然后我们让虚拟机器来执行这个HelloWorld。
  1. 虚拟机会在classpath中找到HelloWorld.class。
  2. 虚拟机中的解释器(interpret)会把HelloWorld.class解释成字节码。
  3. 把解释后的字节码交由execution engin执行。
  4. execution engin会调用native method(即平台相关的字节码)来在host system的stdout(显示器)的指定部分打印出指定的字符串。
  5. 这样, 我们就看到"helloworld"字样了。

  有了这个流程后, 我们就好理解上面几个术语了:
  a. JDK: java develop kit (JAVA API包)
  b. SDK: software develop kit, 以前JDK 叫做java software develop kit, 后来出了1.2版本后, 就改名叫jdk了, 省时省力, 节约成本。
  c. JRE. java runtime environment 我们的helloworld必须在JRE(JAVA运行环境,JAVA运行环境又叫JAVA平台)里面, 才能跑起来。 所以, 显然地, JRE其实就是JDK + JVM
  d. JVM java virtual machine. 简单地讲, 就是把class文件变成字节码, 然后送到excution engin中执行。而为什么叫虚拟机, 而不叫真实机呢? 因为JVM本身是又不能运算, 又不能让显示器显示"helloworld"的, 它只能再调用host system的API, 比如在w32里面就会调c++的API, 来让CPU帮他做做算术运算,来调用c++里面的API来控制显示器显示显示字符串。 而这些API不是JDK里面有的,我们平时又看不见的,所以我们就叫它native api了(亦曰私房XX)。
  e. 解释平台无关。 有人会说, 在linux的里面调用native api与w32里面调用的api肯定不一样吧? 那为什么说JAVA是平台无关的呢?
其实是这样的, 君不见java.sun.com里面又有jdk-for-w32又有jdk-for-linux下载吗? 刚才不是说了吗? native api, native api, 就是我们平时看不见的api吗! 调用native这些烦琐的活儿都让jdk去做了。所以我们调用的时候只用知道jdk(java api) 里面的java.io.*能提供磁盘访问功能, java.awt.* 能画个框框画个圆圆就行了吗。 至于JDK又是怎么调用的, 在LINXU上更圆呢? 还是在W32上更圆,(x) 这个就是JDK个人的事情了。(理论上讲是一样圆的, 当然这又和显示器是否纯平相关了:D)
  同时, 这里就引申出了另一个话题。既如何编写平台无关的JAVA程序。 其中关键的一条, 就是调用且只调用jdk中的API, 而不要私自调用native api。 原因很简单啊, JDK-for-linux和JDK-for-w32表面都是一样的,所以我在w32里面调用JDK写的java程序,在linux里面也会一样的写法啊, 所以就可以移植来移植去都没问题。(b) 但是如果我在w32里面调用了 一个图形显示的native api, 当我移植到linux去的时候, 谁又能保证里面也有相同名称,相同参数,相同返回值, 相同功能的native api供我调用呢!(?)

时间: 2024-08-07 04:20:53

1、java基础之java程序运行机制的相关文章

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

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

Java 程序运行机制

目录 Java 程序运行机制 运行过程 注释 JDK, JRE, JVM 第一个 JAVA 程序 java命名规范 入门小游戏 Java 程序运行机制 运行过程 源文件 (a.java) Java 编译器 字节码文件(a.class) 进入 JRE ,分别执行 类装载器-->字节码校验器-->解释器 系统平台,执行. 注释 JRE 中包含 JVM (JAVA虚拟机); 其中的字节码校验器也是 JAVA 安全性的一种体现. 也正是因为有 JVM 的存在, 使得 JAVA 具有挂平台的特性; JV

【java基础】Java反射机制

一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型

Java基础知识——类装载器与反射机制

类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件. 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件: 2.链接:执行校验.准备和解析(解析是可以选择的): 3.初始化:对类的静态变量.静态代码块执行初始化工作: 类装载工作由ClassLoader及其子类负责.JVM在运行时会产生三个ClassLoader:根装载器.ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器). 根装

java实例化对象时程序运行顺序

当java实例化对象时,首先先进行类加载,类加载的整个过程是将类字节码引入内存,并未类中的static变量赋值.上篇文章已经大概分析了类的加载机制,下面讲一下类的实例化过程. 首先引入示例代码 父类 package test; public class Fu { public int j = 9; public static int i = 10; static{ i = 9; System.out.println("Fu静态代码块"); } { j = 10; System.out.

JAVA的技术特点及运行机制

2017.11.5 阴  一.Java的技术特点 Java包含了很多技术,从整体上分,Java技术可分为:Java编程语言和Java平台 Java编程语言是一种高级的编程语言,其特点有: >简单 >结构中立 >面向对象 >健壮性 >可移植性强 >高性能 >多线程 >安全性 >动态   1.跨平台性 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬

Java基础 之Java动态绑定详解

程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定(早绑定 编译器绑定): 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现.例如:C. 针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定(迟绑定 运行期绑定): 后期绑定:在运行时根据具体对象的类型进行绑定. 若一种语言实现

Java基础之——Java概述与基础知识

1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务. 这种人和计算机之间交流的过程就是编程. 2.Java语言概述,历史.特点 是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级语言. 是一种面向Internet

【Java基础】Java面试题目整理与解说(二)

1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的差别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完毕了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

【Java基础】Java面试题目整理与讲解(二)

1.Collection 和 Collections 的区别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的区别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程