`
diecui1202
  • 浏览: 98487 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java虚拟机学习笔记(一)Java体系结构

阅读更多
一、体系结构组成

当编写并运行一个Java程序时,就同时体验了这四种技术。用Java语言编写源代码,马它编译成Java Class文件,然后再在Java虚拟机上运行class文件。当编写程序时,通过调用类中的方法来访问系统资源。当程序运行的时候,它通过调用class文件中的方法来满足程序的Java API调用。

  1. Java程序设计语言
  2. Java Class文件格式
  3. Java应用编程接口
  4. Java虚拟机

软件实现的Java虚拟机如图:

二、Java虚拟机
  1. Java虚拟机的主要任务是装载class文件并执行其中的字节码。JVM包含一个类装载器,它可以从程序和API中装class文件。Java API中只有程序执行时需要的那些类才会被装载。
  2. 当JVM是由主机操作系统上的软件实现的时候,Java程序通过调用本地方法(native方法)和主机交互。Java中有两种方法:
    • Java方法:由Java语言编写的,编译成字节码,存储在class文件中,是平台无关的;
    • 本地方法:由其它语言(C,C++或汇编语言)编写的,编译成和处理器相关的机器代码,保存在动态链接库中,格式是各个平台专有的,是平台相关的;当编写一个平台独立的Java程序时,必须遵守的一条最重要的原则就是:不要直接或间接调用不属于Java API的本地方法;一个平台无关的Java程序如图:
    • 运行中的程序调用本地方法时,JVM装载包含这个本地方法的动态库,并调用这个方法;
三、类装载器
  1. 一个Java应用程序可以使用两种类装载器:"启动"(bootstrap)类装载器和用户自定义的类装载器。启动类装载器(这是系统中唯一的)是JVM的一部分。
  2. Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类,例如从网络下载class文件。
  3. 用户定义的类装载器使得在运行时扩展Java应用程序成为可能。当它运行时,应用程序能够决定它需要哪些额外的类,能够决定是使用一个或是更多的用户定义的类装载器来装载。由于类装载器是使用Java编写的,所以能用任何在Java中可以表述的风格来进行类的装载。这些类可以通过网络下载,可以从某些数据库中获取,甚至可以动态生成。
  4. 每一个类被装载的时候,JVM都监视这个类,看它到底是被启动类装载器还是被用户定义类装载器装载。当被装载的类引用了另外一个类时,JVM就会使用装载第一个类的类装载器装载被引用的类。这样,两个类就动态地建立起了联系。
  5. 由于JVM采取这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。被不同的类装载器装载的类存放在不同的命名空间中,它们不能互相访问,除非应用程序显式地允许这么做。通过这种方法,就能够使用Java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问和破坏善意代码的权限。
  6. Java类装载器体系结构如图:
四、Java独有的特性
  1. 在Java中没有通过使用强制转换指针类型或者通过进行指针运算直接访问内存的方法;
  2. Java避免无意间破坏内存的另一个办法是自动垃圾收集;在Java中,只需要停止对一个对象的引用,一段时间后,垃圾收集器会自动回收这个对象所占用的内存;
  3. Java在运行时保护内存完整性的第三个办法是数组边界检查;
  4. 最后一个关于Java确保程序健壮性的例子是对对象引用的检查,每次使用引用的时候,Java都会确保这些引用不为空值;
3
0
分享到:
评论

相关推荐

    深入Java虚拟机读书笔记1

    类装载体系结构包括启动类装载器和用户定义的类装载器,形成了层次结构。Bootstrap ClassLoader首先加载JRE的核心类库,然后用户定义的类装载器加载应用程序的类,它们之间通过委托模型协作工作,保证类的唯一性。 ...

    深入理解Java虚拟机读书笔记之:第3章 安全(2)

    总的来说,"深入理解Java虚拟机读书笔记之:第3章 安全(2)"主要涵盖了Java安全体系的核心概念,包括类加载器、权限模型、安全管理器以及相关工具的使用。理解这些内容对于任何希望构建安全、可靠的Java应用程序的...

    Java课堂笔记学习Java课堂笔记学习

    ### Java课堂笔记学习 #### 软件定义与软件开发 - **软件**:软件是运行在硬件之上的一组指令集,这些指令集能够完成特定的功能。软件开发过程包括设计和编码两个主要阶段。 #### 编程语言的重要性 - **编程语言...

    CoreJava学习笔记

    6. **体系结构中立**:Java程序可以在任何环境中运行,只要这个环境中有一个Java虚拟机(JVM)。 7. **可移植性**:Java的可移植性来源于它的体系结构中立性。 8. **解释型**:Java源程序经过编译后得到的是字节码,...

    学习笔记之对象的创建(Java)

    Java虚拟机的体系结构由多个关键组件构成,包括但不限于类装载子系统、运行引擎、方法区、堆、Java栈、程序计数器和本地方法栈等。这些组件共同协作,支持Java程序的高效执行。 1. **类装载子系统**:负责从文件...

    良葛格Java学习笔记

    这个压缩包包含了一本名为"良葛格Java学习笔记"的HTML文档,它很可能包含了从基础到高级的Java知识体系,涵盖了从语法、数据类型、控制结构,到面向对象编程、异常处理、集合框架、多线程、网络编程等多个方面。...

    Java+JDK+6学习笔记.pdf

    ### Java+JDK+6 学习笔记知识点详解 #### 一、Java 概述 ...综上所述,Java+JDK+6 学习笔记覆盖了 Java 语言的基本概念、特性以及如何开始学习 Java 的一系列指导。这对于初学者来说是非常宝贵的学习资源。

    java基础知识学习笔记

    最后,笔记可能会提及Java的异常处理、反射机制、注解(Annotation)以及JVM(Java虚拟机)的工作原理,这些都是深入理解Java的必备知识。 总的来说,“java基础知识学习笔记”是一份全面的教程,覆盖了Java编程的...

    Java任小龙版基础笔记.zip

    9. **JVM原理**:理解Java虚拟机的工作原理,包括类加载机制、内存模型和垃圾回收,这对于优化代码和排查问题非常重要。 10. **Java标准库**:熟悉常用的Java API,如Collections、Concurrency、Networking等包,...

    Java编程思想学习笔记

    在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...

    JAVA语言学习笔记之01

    - **JRE (Java Runtime Environment):** 提供了运行JAVA程序所需的运行时环境,包括Java虚拟机(JVM)和Java核心类库等。 #### JAVA开发工具 - **IDEs (Integrated Development Environments):** - **记事本:** ...

    黑马java教程知识点笔记整理

    Java程序可以在任何实现了Java虚拟机(JVM)的平台上运行,这被称为“一次编写,到处运行”。 【类与对象】 在Java中,一切皆为对象。类是创建对象的模板,它定义了对象的属性(变量)和行为(方法)。实例化一个...

    北大青鸟的学习笔记java

    在北大青鸟的学习笔记中,Java作为一门广泛使用的编程语言,是学习者深入理解软件开发的基础。这门课程涵盖了Java的各个方面,旨在帮助学生掌握核心的编程概念和实际应用技巧。下面将详细阐述Java编程的一些关键知识...

    java入门基础学习笔记

    Java语言的特性包括简单性、面向对象、分布式、解释性、稳健性、安全性、体系结构中立性、可移植性、高性能、多线程和动态性等。为了能够运行Java程序,我们需要搭建相应的Java语言环境,包括JDK和JRE,并且需要正确...

    java体系笔记

    本Java体系笔记覆盖了从基础知识到高级特性的全面内容,帮助读者建立扎实的Java知识体系,无论你是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,你可以掌握编写高效、稳定且易于维护的Java应用。

    java学习笔记(corejava)部分.rar

    12. **JVM内存管理**:理解Java虚拟机(JVM)的工作原理,包括堆内存、栈内存、方法区以及垃圾收集机制,对于优化程序性能至关重要。 13. **注解(Annotation)**:注解是一种元数据,提供了一种安全的方式向编译器、...

    良葛格 Java 学习笔记-JavaGossip全(v1+v2)

    《良葛格 Java 学习笔记-JavaGossip全(v1+v2)》是一部集成了作者良葛格多年编程经验的学习资料,旨在帮助初学者和有经验的开发者深入理解和掌握Java这门强大的编程语言。这份笔记包含了JavaGossip的两个版本,v1和...

Global site tag (gtag.js) - Google Analytics