路边飞的博客

直面血淋淋、湿漉漉、暖洋洋的程序人生

JVM体系结构介绍-笔记

| Comments

为什么使用Java?

网络化大潮,Java是为网络而设计。安全性网络移动性平台无关性都是围绕这个目标设计。

体系结构

四个独立但是相关的技术:

  • Java程序设计语言
  • Java class文件格式
  • Java应用编程接口(API)
  • Java虚拟机

Java虚拟机

Java虚拟机的主要任务是装载class文件,并且执行其中的代码。

不同的虚拟机,可能有不同的执行引擎

  • 直接解释字节码。
  • 即时编译。全部转换成本地代码)
  • 自适应编译。把最频繁的10-20%代码编译成本地代码。
  • 硬件芯片编译。

本地方法与Java方法

本地方法(JNI)用于与操作系统打交道,是平台相关的 Java方法就是纯Java实现的方法,是平台无关的

ClassLoader

解决的是安全性(隔离性)与网络移动性(动态加载class).分为两类:一类是JVM的系统加载器,称为bootstrap classloader,另一个类是用户自定义的加载器

Java class文件

在平台无关性、网络移动性更适应网络

  1. 平台无关性 独立于底层主机的二进制形式。以以字节码的形式,避免编译时与特定系统绑定。
  2. 网络移动性
    • 更紧凑的格式
    • 动态连接(使用时才加载)
    • 动态扩展(可动态增加class)

Java API

Java API是运行库的集合,是Java平台都要实现的必要部分,可以安全地假设可以被获取到。在需要与主机资源打交道的时候,Java可以调用Java API来实现,从而避免平台相关。

Java程序设计语言

一门通用语言,并不局限与网络相关的领域。其核心思想是使得程序员更有效率,程序更加健壮,而且在于为新兴的网络为中心的计算环境提供一个工具。

  • 面向对象
  • 多线程
  • 结构化错误处理
  • 垃圾收集
  • 动态连接
  • 动态扩展

缺点:

  1. 性能的问题
  2. 内存管理。回收的不确定性。
  3. 线程调度。过于宽松的线程规范,可能导致不同平台的调度方式不同。
  4. 功能的最小公分母问题。这是为实现跨平台的必然困难。
  5. 易于反编译。这是由于为了实现动态连接性,一个类对另一个类的引用是符号引用,而不是指针或偏移量。所以,被引用的类的方法,字段等,需要详细描述。使得反编译变得容易。混淆器可以减轻这个问题。

Comments