第一章 java结构介绍

转载 2007年09月24日 13:17:00
一、环境下的机遇与挑战
      网络的快速发展给现代变成语言提出了新的挑战和机遇,而作为新生语言的java提供了三种机制来应对这种变化,他们是:
     1、平台独立
     2、安全(网络安全,语言安全)
     3、网络移植
二、Java体系的组成
     我们所说的Java技术实际上包含了四个独立而又紧密联系的四个部分:
     1、Java编程语言
     2、Java虚拟机
     3、Java Class文件格式
     4、Java API
三、Java环境
     Java虚拟机和Java API都是独立于每个特定平台的,所有他们也被称为“Java平台(Java Platform)”,而除此之外的就被称为“Java运行时系统(Java runtime system)”
四、Java虚拟机
     Java虚拟机是Java技术体系中的核心,他是其他三项技术实现的基础。他构成了一个虚拟的计算环境,为每个Java程序提供了一个确定的执行环境。
     Java 虚拟机的主要工作就是加载Java Class文件,并执行中包含的字节码。正如图1-3所示,每个Java虚拟机都包含一个Class Loader,他负责加载所有的Class File,他负责加载自己程序的和Java API的两种Class File。只要是程序运行需要的Class文件都会被加载都Java虚拟机中。
     字节码在execution engine中被执行,它在不同的Java虚拟机中可能会有不同的实现。在一个由软件实现的Java虚拟机中,最简单的实现就是逐个的解释每个字节码。也 有一种比较快,但是也需要更多内存的实现:及时编译(just-in-time compiler)。在这种实现中,当一个方法被初次调用时被编译为本地机器码(native machine code),执行后会被缓存,但再次调用这个方法时直接执行缓存中的机器码。
有时Java虚拟机也会被称为“Java解释器(Java interpreter)”,这个名词很容易让人误解,Java虚拟机只是解释字节码为本地机器码,可是在Java虚拟机有时会有不同的实现,比如及时编译(just-in-time compiler)。
     Java 也提供了一种直接方法本地系统资源的本地方法(native methods),并且提供了一种本地方法接口(Java Native Interface, or JNI),他可以让本地方法可以和Java平台一起工作。但是,当你是用本地方法时,程序就成为系统关联(platform-specific),丢失了 系统独立的属性。所有如果你想让你的程序独立于系统,你就应该完全用Java来实现你的程序。
五、Class Load的体系结构
     Java 虚拟机中的Class Load结构是Java的安全性和网络可移植性的保证。一个Java程序能够使用两种Class Loader:一种是原始ClassLoader("primordial" class loader),一种是class loader objects。
     1、原始Class Loader(("primordial" class loader):它是Java虚拟机实现的一部分,原始Class Loader通常从本地磁盘加载被信任的Class,包括Java API的Class。
     2、 类加载器(class loader objects):它不是Java虚拟的一部分,可以用Java语言实现。所有原始Class Loader加载的Class,Java虚拟机总是认为它是被信任的,而由类加载器加载的类,Java虚拟机认为它是不被信任的。
     无论是原始Class Loader还是类加载器(class loader objects)加载的类,都会被Java虚拟机跟踪。当一个类第一次使用另外一个类时,他会使用加载本身这个类的Class Loader来加载这个类。
每 个类在默认情况下只能看到由同一个Class Loader加载的其他类。正是这种机制,可以让你在一个Java程序中使用多重命名空间(name-spaces)。每个Class Loader维护自己的命名空间。通过这个方法也可以让你的程序将程序的各个部分隔离,比如将敌方的代码和友方的代码隔离。
六、The Java Class File
     Java Class File的设计非常好的支持了Java技术的平台独立性和网络可移动性,他将Java程序编译成为一种Java虚拟机可识别,而由不依赖于本地机器环境的二进制格式。Java Class File的有如下三个特点:
     1、动态连接。所有依赖于平台的实现,均由Java虚拟机执行时动态连接
     2、独立于平台的字节码。Java Class File中始终都使用big-endian编码格式。
     3、紧凑的文件结构。让Class文件更小,更容易传输。
七、The Java API
     Java API也是Java平台独立和安全性的重要保证。Java API是特定于实现平台的,Java API往往通过本地方法来访问系统资源。
     Java API本身的实现也体现了平台独立性。比如Java图形接口就是通过访问AWT(Abstract Windows Toolkit),来为Java程序提供一个独立于平台的统一界面。
     Java API不仅仅实现了平台独立性,而且也为Java的安全性提供了很好的支持。Java API在作任何可能危害系统的事情时(比如写磁盘),总会通过安全管理器(security manager)来检查许可证。安全管理器(security manager)容许Java程序实现自己的安全策略,比如禁止写磁盘。通过实现安全管理器(security manager),程序可以很好的控制那些非安全代码。
八、The Java Programming Language
     虽然Java语言是为了网络程序而设计的,但是他的运用不仅仅限于网络。Java语言本身提供了很多其他的软件技术,有:
     1、面向对象
     2、多线程
     3、错误处理
     4、动态连接
     5、动态扩展
     6、垃圾收集
     Java语言有很多优点和缺点,最明显的优点是他能够提升程序员的生产力,而缺点就是有点慢。
首先Java是一门面向对象的语言,他提倡重用,这点就比其他过程语言(如C)大大提升了生产力。而和C++相比,Java也有很多特点来改善生产力,最突出的就是:
     1、限制了直接内存操作。
     2、就是垃圾收集。
     3、永远的边界检查,最好的例子就是Null变量的检查,在C++中他会导致  程序的崩溃,而在Java中他只是抛一个异常。
     这些特征保证了Java的更高生产力,更短的开始周期,更低的开发投入。但是他们也是Java慢的原因:
     1、永远的边界检查,永远的类型检查,永远的Null检查,永远的垃圾收集这些都是Java程序要比C++慢,但是相对于程序的开发效力,我认为这些还是值得的,毕竟最总用户并一定不能感觉到这种速度。
     2、 作为一种解释型语言,Java在速度上要落后C++许多。C++编译时将程序直接转换为可以直接执行器码,而Java必须将程序翻译为独立于平台的字节 码。这使由Java虚拟机执行的Java字节码,要比C++编译的代码慢10-30倍。但是,你可以将Java程序编译为特定平台的机器码,这样可以让程 序快许多,只是丢失了平台独立的特性。不多及时编译技术(just-in-time)可以弥补一点速度上的损失,那能够将速度上的差距缩短到7-10倍。 在大多数情况下,通过及时编译达到的速度已经能过满足最终用户的要求了。
九、Java体系结构的代价
     Java是一网络为导向设计的体系结构,这种体系结构为Java带来了很多的优点。但是,我们也必须为这些优点付出代价。当Java的设计者面对一个问题的时候,他们总是将设计偏向了网络这一边,这导致Java并不能解决所有的问题。
     1、速度:至少有如下的这些特性降低了Java程序的执行速度:
          1)、解释执行字节码,让Java程序比机器码程序慢了10-30倍。
          2)、及时编译,虽然能过提升7-10倍的执行速度,可是依然要比机器码慢
          3)、Java是动态连接的
          4)、Java虚拟机可能要去等待从网络上下载Class文件。
          5)、永远的数组边界检查
          6)、所有新建的对象都存放在堆中(不是放在堆栈中)
          7)、所有对象变量在运行时判断是否为Null
          8)、所有对象变量在运行时判断是否类型安全
          9)、垃圾收集往往没有在C++中直接控制来的有效
          10)、所有的原始类型都是独立于平台(这意味在执行时需要转换),而不是像C++中直接依赖于平台。
          11)、Java中所有的字符串都编码为UNICODE,而不是像C++中操作ASCII码。
应为这些导致Java程序即使编译为本地机器码不会像C++程序那样快,这是的Java不适合解决那些对速度要求非常苛刻的系统。
     2、对内存的直接控制:垃圾收集可以让程序员有更多精力处理业务逻辑,更容易学习,但是这也让程序员放弃了对内存的直接控制。放弃了对内存的直接控制,让Java不适合处理实时问题。毕竟多数实时系统也不在乎什么平台独立性什么的。。
     3、 平台独立性:Java API必须保证在不同的系统上有一致的行为,这就要求Java API只能实现所有系统的最小公分母(lowest-common-denominator)。这种最小公分母的选择可能会使程序员和最终用户在不同程度 上所到不同操作系统的影响。
     4、动态连接:它使得Java必须用描述符(descriptor (the fieldís type))来实现连接,而不是像静态连接那用是用指针。这样Java Class 文件中必须保存不够的描述符要支持这种动态连接,这让Java Class文件更容易被反编译。可能你的对手只要花很少的代价就可以看到你辛辛苦苦写的代码。不过你可以混乱(obfuscate)的代码,让你的对手不 是那么容易取得你的代码。混乱(obfuscate)改变了Class文件里边的类名、字段名、方法名,但是不该点所作的操作。
十、展望
     热点编译,将程序花费程序80%运行时间的程序优化,编译为本地代码。
 

相关文章推荐

数据结构(Java版 第一章 PPT

  • 2010-09-12 09:16
  • 1.49MB
  • 下载

第一章课后的几个编程题——数据结构与问题描述Java语言描述(第3版)

题目描述:素数除了1和它本身没有其他因子(1不是素数,最小素数是2) 问题1. 写一个程序判断正整数N是不是素数? 问题2. 如果N是一个非常大的整数,如何判断? 题目描述:查找过半元素 题目描述...

数据结构与算法分析-第一章Java类(02)

编写一个名为Person的类,它包含分别表示人的名字与年龄的两个数据域。要求此类包含对其中任何一个数据域进行设置与获取的方法。还要求包含可进行下列测试的方法: 两个Person对象是否相...

阅读<java数据结构和算法>这本书的总结:第一章

前几天在博客上看到一句话:编程最核心的在于数据结构和算法,其他都是浮云.以及老师给我的一些建议,于是我选择啃啃基础的东西,对于一个非科班但从兴趣上入手的新手(真的需要老司机带呀...此处不开车),很有...

数据结构与算法分析-第一章Java类(05)

许多游戏都可以在滚动两枚骰子的基础上进行。定义一个Die类表示一枚有n个面的骰子。n的默认值是6.该类能滚动骰子,并测得其像上面的值。使用随机数来模拟骰子的滚动。并可依用户要求以图形界面来演示骰子的面...

JAVA数据结构与算法-第一章-综述

面向对象的思想: package com.zzk.cn; class BankAccount { private double balance;//账户余额 public...

《深入java虚拟机》第一章 java体系结构

java的跨平台性,它之所以能够跨平台其实就是靠jvm。 java平台扮演的始终是一个缓存角色,它介于程序与系统的中间。(java平台:javase,javaee,javame决定java体系结构)...

读《JAVA并发实践》笔记---第一章(介绍),第二章(线程安全)

线程的优点: 1.可以使用多处理器。一个单线程应用只能运行中一个处理器上,如果不运用多线程那么在双处理器系统中相当于放弃了百分之五十的CPU资源。 2.模型的简化。就如同工厂生产线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)