《深入JAVA虚拟机》读书笔记

介绍

java技术的核心就是java虚拟机——所有java程序都在其上运行。
需要java虚拟机,java API和java class文件的配合,java程序才能运行。

  • 为什么使用java?

        java适合网络环境的能力是由其体系结构决定的,他可以保证安全的,健壮的且和平台无关的程序通过网络传播,在很多不同的计算机和设备
    上运行。
    
  • 网络带来的而挑战和机遇:

    挑战:
    逐渐增长的以网络为核心的硬件环境,其包括的设备越来越广泛;
    安全性问题——1.恶意的程序员编写的恶意程序,如病毒;
                  2.程序健壮性问题,善意的而程序员编写有缺陷的代码,如BUG;
    
    平台无关性,安全性和网络移动性,使得java体系和发展中的网络计算环境相得益彰。
    
  • 体系结构(重点)

    java体系包括四个独立但相关的技术:

    1.java程序设计语言;
    2.java class文件格式;
    3.java应用编程接口(java API);
    4.java虚拟机。
    
  • 流程(重点):

        用java编程语言编写源代码,把它编译成java class文件,然后再在java虚拟机中运行class文件。当编写程序时,通过调用类(这些类实现
    了java API)中的方法来访问系统资源比如(I/O)。当程序运行的时候,他通过调用class文件中实现了java API的方法来满足程序的java  API
    调用。
    

java虚拟机和java API仪器组成了一个“平台”所有java程序都在这上面编译。java虚拟机和java API的组合除了被称为java运行时系统外,还被称为java平台。

——————————————————————

Java虚拟机

    java虚拟机是java面向网络的核心,它支持java面向网络体系结构三大支柱的所有方面:平台无关性,安全性和网络移动性。
    java虚拟机是一台抽象的计算机,其规范定义了每个Java虚拟机都必须实现的特性,但是为了每个特定实现都留下了很多选择。

《《深入JAVA虚拟机》读书笔记》
《《深入JAVA虚拟机》读书笔记》

  1. 主要作用(重点):

        java虚拟机的主要任务是装载class文件并且执行其中的字节码。java虚拟机包含一个类装载器(class loader),它可以从程序和API中装载 
    class文件。java API中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。
    
        当java虚拟机是由主机操作系统上的软件实现的时候,java程序通过调用本地方法(native method)和主机交互。java有两种方法:java方
    法和本地方法。java方法是由java语言编写,编译成字节码,存储在class文件中的,本地方法是由其他语言(比如C,C++,或者汇编语言)编写
    的。编译成和处理器相关的机器代码。
    
  2. 类装载器的体系结构

        类装载器的体系结构是java虚拟机在安全性和网络移动性上发挥重要作用的一个方面。
        一个java程序可以使用两类类装载器:"启动"(bootstrap)类装载器和用户定义的类装载器。
    
    • 重点

          当被装载的类引用另外一个类时,虚拟机就会使用装载第一个类的装载器装载被引用的类。由于java虚拟机采取这种方式进行类的装
      载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。
      
          java的体系结构允许在一个java应用程序中建立多个命名空间。
      
          运行时的java程序中的每一个类装载器都有自己的命名空间。被不同类装载器装载的类放在不同的命名空间中,他们不能相互访问,
      除非应用程序显式的允许这样做。通过这种方法,就可以使用java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的影响,
      特别是能够阻止恶意代码获取访问和破坏善意代码的权限。
      

《《深入JAVA虚拟机》读书笔记》

——————————————————————

Java class文件

java class文件主要在平台无关性和网络移动性方面使java更适应网络。
  • 作用:

    为java程序提供独立于底层平台的二进制形式的服务。
    
  • 优势:

        java class文件设计紧凑,可以快速的在网络上传送。其次由于java程序是动态连接和动态扩展的,class文件可以在需要的时候下载。这个
    特点使得java应用程序能够安排从网络上下载class文件的时间,从而最大限度地减少终端用户的等待时间。
    

(java applet)

——————————————————————

java API

    java API通过支持平台无关性和安全性,使得java适应于网络应用。java API是运行库的集合,它提供一套访问主机系统资源的标准方法。

    java API class文件为底层主机提供了具有平台无关性的,标准接口的java程序。对于java程序而言,无论平台内部如何,java API都会有同样
的表现和可预测的行为。

(AWT(Abstract Windows Toolkit,抽象窗口工具箱),Swing)

《《深入JAVA虚拟机》读书笔记》

  • 安全:

        当java API的方法进行任何有潜在危险的操作(比如本地磁盘写操作)之前,都会通过查询安全管理器来效验是否得到授权。在java 1.2版本
    中,安全管理器的工作被访问控制器所取代。访问控制器是一个类,该类用来执行栈效验,以觉得是否允许某种操作。
    

——————————————————————

java程序设计语言

    1.面向对象;
    2.多线程;
    3.结构化错误处理;
    4.垃圾收集;
    5.动态链接;
    6.动态扩展。
  • 面向对象的承诺之一是提升代码的重用率,提高开发者的效率。
  • Java和C++一样通过new操作符来分配新对象在堆中的内存空间,但Java中没有与new对应的delete操作符,来清除不需要的对象,而是通过垃圾回收器自动回收这个对象所占用的内存。
  • Java的异常机制 和 对象定义的严格性 能够有效的避免程序崩溃。

——————————————————————
java体系结构的代价

  • 每当要在两个理想的特性之间做出取舍的时候,java设计者只会选择在网络环境中表现得更好的那个。
  • 和其他技术(如C++)相比,java程序的执行速度比较低。主要在于java虚拟机性能的提升。(具体方法见书32页)
  • 在内存管理和线程调度上的缺陷。垃圾收集器可以使得程序更加健壮,这也是网络环境中很有价值的安全性保障措施。但是垃圾收集器也给程序运行时的性能加入了一些不确定性,你无法确认垃圾收集器什么时候开始收集垃圾,无法确实垃圾收集器是否开始收集垃圾,也无法却确定垃圾收集到底持续多长时间。
  • 最小公分母问题。(见本书33页)

结论:

  • 极大程度上提高程序员的效率,增强程序的健壮性,具有过得去的性能。
  • 为以网络为中心的计算环境提供了一种工具。
    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/ck1600259860/article/details/50787019
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞