`
水上风荷
  • 浏览: 9048 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类

《深入Java虚拟机》学习笔记一:Java体系结构

    博客分类:
  • Java
阅读更多

前言:从事Java相关的开发工作也有近三年时间了,但是最近不管是在工作和学习中,感觉对很多的问题的理解都还是不够深刻(好像是碰到了所谓的“瓶颈”),所以决定静下心来好好将自己的知识结构梳理一遍,以求获得更大的进步!
      首先想深入研究一下的是JVM。一直很都很想了解一下JVM的具体实现的细节知识,选了一本书《Inside the Java Virtual Machine, Second Edition》,虽然比较旧了,但还算是比较权威的JVM参考书吧?(如果哪位知道有更好的资料,可以推荐给在下,非常感谢!)
第一章:Java体系结构介绍
1、Java为什么重要?

      Java是为网络而设计的,而Java这种适合网络环境的能力又是由其体系结构决定的,可以保证安全健壮和平台无关的程序通过网络传播。
2、网络带来的机遇和挑战
      平台无关性、安全性、网络移动性,Java体系的这三个方面共同使得Java和发展中的网络计算环境相得益彰。
3、Java体系结构
      Java程序设计语言
      Java class文件格式
      Java应用编程接口(API)
      Java 虚拟机 
     【这个其实比较重要,对Java的理解不要仅仅局限于它是一种语言!】
4、Java虚拟机
      Java面向网络的核心就是Java虚拟机,Java虚拟机就是一台抽象的计算机,其规范规定了每个Java虚拟机都必须实现的特性,但是每个特定的实现都有很多选择。而规范本身也很灵活,允许用纯软件的方式来实现,也可以很大部分由硬件来实现。
      Java虚拟机的主要任务是装载class文件并且执行其中的字节码。
      Java有两种方法,Java方法和本地方法,Java方法是有Java语言编写,编译成字节码,存储在class文件中的。本地方法是由其他语言编写的,编译成和处理器相关的机器代码。本地方法保存在动态链接库中,格式是各个平台专有的。Java方法是与平台无关的,但是本地方法却不是。通过本地方法,Java程序可以直接访问底层操作系统的资源。
      Java本地接口(JNI)使本地方法可以在特定主机系统的任何一个Java平台实现上运行。
5、类装载器的体系结构
      类装载器的体系结构是Java虚拟机在完全性和网络移动性上发挥重要作用的一个方面。在Java虚拟机中,存在着多个类装载器。Java虚拟机拥有灵活的类装载器体系结构,从而使Java应用程序得以用自定义的方式来实现类的装载。
一个Java应用程序可以使用两种类装载器:启动(BOOTSTRAP)类装载器和用户定义的类装载器启动类装载器系统唯一,是Java虚拟机实现的一部分。
      每一个类被装载的时候,Java虚拟机都要监视这个类,看它到底是被启动类装载器还是被用户定义类装载器装载。当被装载的类引用了另一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。由于Java虚拟机采取这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个类装载器装载别的类,通过这种方法,Java体系结构运行一个Java应用程序中建立多个命名空间,运行时的Java程序中的每一个类装载器都有他自己的命名空间。
6、Java Class文件
      为Java程序提供独立于底层主机平台的二进制形式的服务。当编译和链接一个C++程序的时候,所得的可执行二进制文件只能在指定的硬件平台和操作系统上运行,因为这个二进制文件包含了目标处理器的机器语言。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的“机器语言”。
      除了特定处理器的机器语言之外,传统二进制可执行文件的另一个依赖于具体平台的属性石整数的字节顺序。在Java Class文件中字节顺序是高位在前,这与使用何种平台产生这个文件和在何种平台上使用这个文件没有关系。
      除了对于平台无关性的支持,Java Class文件还在支持网络移动性的Java体系结构中担当了至关重要的角色。首先,class文件设计的紧凑,可以快速在网络上传送,其次,由于Java程序师动态链接和动态扩展的,class文件可以在需要的时候才下载。
7、Java API
      JavaAPI 通过支持平台无关性和安全性,使得Java适应于网络应用。
      运行Java程序时,虚拟机装载程序的class文件所使用的JavaAPI class文件,所有被装载的class文件(包括从应用程序中和从JavaAPI中提取的)和所有的已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。
      Java API 的class文件天生就与主机平台密切相关,在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API功能。对于Java程序而言,无论平台内部如何,JavaAPI都会有同样的表现和可预测的行为,正是由于在每个特定的主机平台上都明确地实现了Java虚拟机和JavaAPI,因此,Java程序自身就能够具有平台无关性的程序。
      JavaAPI在Java安全性模型方面也做出了贡献,当JavaAPI的方法进行任何有潜在危险的操作之前,都会通过查询安全管理器来检验是否得到了授权。安全管理器是一个为应用程序提供自定义安全策略的特殊对象。通过强制执行安全管理器和访问控制器建立的安全策略,JavaAPI促进了安全环境的建立,在这种安全环境中,可以运行具有潜在危险的代码。
8、Java程序设计语言
      Java是一门面向对象的语言,面向对象的技术的承诺之一就是提高代码的重用率,提高开发者的效率,但是这并不意味着Java比c++更有效率。不过和c++相比,Java还是有一些可以提高开发者效率的十分重要的差别,这种效率的提升主要来自于Java对直接内存操作的约束。
      由于Java在运行时强制执行严格的类型规则,根本无法以可能导致内存冲突的方式直接管理内存,因此,Java程序中不会出现那些常使C++程序员降低效率的特定的BUG。
      Java避免无意间破坏内存的另一个办法是自动垃圾收集,Java和c++一样,有一个new操作符,可以通过它来为新对象在堆中分配内存,但是和c++不同的是,Java并没有与new相对应的delete的操作符。垃圾收集器禁止Java程序员显示指明哪个对象应该被释放,当c++项目中的大小和复杂性逐渐上升时,程序员决定哪个对象应该被释放或者判断一个对象是否已经被释放的难度也随之增加。如果不在使用的对象没有被释放,会导致内存泄露;多次释放一个对象会导致内存冲突,这两种内存问题都会导致c++程序崩溃。而c++使用的内存管理方式使得确定问题所在相当困难。Java比c++更有效率的原因在于Java中不用再内存冲突的问题上纠缠不清(开发而非执行上的效率)。而且当不再为显示释放内存担心的时候,效率会更高,程序设计业会更加容易。
      Java在运行时保护内存完整性的第三个办法是数组边界检查,在c++中,数组操作实际上就是指针运算,这会带来潜在的内存冲突。Java中绝对不允许数组操作超出边界,从而导致 内存冲突。
      最后一个关于Java确保程序健壮性的例子是对对象引用的检查,每次使用引用的时候,Java都会确保这些引用不为空值。
9、Java体系结构的代价 
       Java程序的执行速度可能比较低,这是Java面向网络特性上所付出的最主要的代价之一。Java面向网络的体系结构所付出的另一个代价是内存管理和线程调度上的缺陷。垃圾收集器可以使得许多程序更加健壮,这也是网络环境中很有价值的安全性保障措施,但是垃圾收集器也给程序运行时性能加入了一些不确定性,你无法确认垃圾收集器什么时候开始收集垃圾,是否开始收集垃圾,也无法确认垃圾收集到底要持续多长时间。 
       Java为了实现平台无关性,也要付出代价,即最小公分母问题,这是任何尝试提供跨平台功能的API都会出现的固有困难。 
       当把Java Class文件与Java编程语言之间的紧密联系和Java天生的动态链接性联系到一起的时候,还要付出一些代价。

 

分享到:
评论

相关推荐

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

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

    深入Java虚拟机读书笔记1

    深入理解Java虚拟机,首先我们要明白Java虚拟机(JVM)的核心功能:它负责装载类文件,执行字节码,并管理内存。Java虚拟机的结构复杂且高效,主要由类装载器、执行引擎、内存管理和类库等组件构成。 类装载器是JVM...

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

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

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

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

    ### 学习笔记之对象的创建(Java) #### Java技术与Java虚拟机 Java作为一种广泛使用的编程语言,其独特之处在于“一次编写,到处运行”的理念。这一特性主要得益于Java虚拟机(JVM)的存在。Java技术主要包括以下几...

    Java+JDK+6学习笔记.pdf

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

    良葛格Java学习笔记

    【良葛格Java学习笔记】是一份全面且深入的Java编程学习资料,旨在帮助初学者和进阶者掌握Java这门强大的编程语言。这个压缩包包含了一本名为"良葛格Java学习笔记"的HTML文档,它很可能包含了从基础到高级的Java知识...

    Java任小龙版基础笔记.zip

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

    JAVA语言学习笔记之01

    - **JAVA语言体系结构:** - **JAVASE(Java Platform, Standard Edition):** 用于开发桌面应用程序。 - **JAVAEE(Java Platform, Enterprise Edition):** 用于开发Web应用程序和企业级应用。 - **JAVAME...

    北大青鸟的学习笔记java

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

    java基础知识学习笔记

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

    java体系笔记

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

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

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

    Java编程思想学习笔记

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

    java入门基础学习笔记

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

    java基础课程视频学习笔记分享.ppt

    ### Java基础课程视频学习笔记知识点总结 #### 一、计算机语言的发展历史 计算机语言经历了从机器语言到高级语言的发展过程。 - **机器语言**:直接由计算机硬件指令系统定义的语言,通常是由二进制数字组成的指令...

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

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

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

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

Global site tag (gtag.js) - Google Analytics