JVM学习笔记(一)

 1.序言                                   

1.Java与生俱来的内存安全性---垃圾收集,取消了指针算法,在使用引用时进行运行时检查,避免了可能出现在Java程序中的大多数内存BUG 。    

2.变量和表达式都有类型,对象和数组都有类。Java程序中每一个变量和表达式都有编译时可以确认的类型(或为基础类型,或为引用类型(类,接口数组))。变量和表达式的类型决定了它所拥有值的范围和种类,所支持的操作以及这些操作的含义。

3.在运行时,每一个对象和数组都有一个类,虽然对象是它的类和所有超类的实例,但是它只拥有一个类。一个对象的类可以是以下情形之一:

  3.1创建对象时所使用的创建实例表达式所提到的类,

  3.2使用newInstance()方法创建对象时所使用的Class对象所代表的类

  3.3使用clone()方法创建对象时被克隆对象的类。

  3.4对以前序列化的对象解除序列化时,创建的对象具有与原对象相同的类。

4 Java创建对象的四种方法

  4.1使用关键字new来创建关键对象实例,构造函数链中的所有构造函数都会被自动调用;

   4.2 newInstance,运用反射手段,调用java.langClass或者java.lang.reflect.Constructor 类中的newInstance()实例方法;

   4.3 clone ,构造函数不被自动调用,要使用clone方法,就必须实现java.lang.cloneable接口;

 4.4运用序列化手段,调用java.io.ObjectInputStream对象的readObject方法;java虚拟机通过从输入流中读入的序列化数据来初始化哪些非暂时性的实例变量。

2.Java体系结构介绍

2.1java体系结构包含四个独立但相关的技术

  2.1.1 java程序设计语言

  2.1.2 Java class 文件格式

2.1.3 Java应用编程接口(API

2.1.4 java虚拟机

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

 Java虚拟机和JavaAPI一起组成了一个“平台”,这个组合除了被称为运行时系统之外,还被称为Java平台,

2.2Java虚拟机

Java虚拟机的主要任务是装载class文件并执行其中的字节码文件,Java虚拟机包含一个类加载器,可以从程序和API中加载class文件,Java API只有程序执行中需要的哪些类才会被加载,字节码由执行引擎来执行。

不同的Java虚拟机中,不同的执行引擎可能实现的非常不同:

  2.2.1 最简单的执行引擎是一次性解释字节码 

  2.2.2 即时编译器 第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码会被缓存,

  2.2.3执行引擎是自适应优化器,会监视运行中程序的活动,并且记录下使用最频繁的代码段,编译成本地的代码,

   

Java源码编译机制:

   分析和输入到符号表

   注解处理

   语义分析和生成class文件

 Java代码编译和执行整个过程

   ● Java源码编译机制

   ●类加载机制

   ●类执行机制

JVM是基于栈的体系结构来执行class字节码的,

一个Java应用程序中可以使用两种类加载器:

   启动加载器和用户定义的加载器,启动加载器是Java虚拟机实现的一部分,Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类

   2.24当被装载的类引用了另一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类;

2.2.5 Java中,没有通过强制转换指针类型或者通过指针运算直接访问内存的方法;

     Java避免无意间破坏内存的另一个方法就是自动垃圾收集,C++程序员常使用     delete来清除内存中不再需要的对象,在Java中,只需停止对一个对象的引用,一段时间后,垃圾收集器会自动回收对象所占据的内存。Java在运行时保存内存完整性的第三个方法就是数组边界检查

2.2.6 Java程序编译成单独的可执行程序的方法(“预编译”)能够改善性能,这通常是以牺牲动态扩展能力为代价的。预编译进行的是静态连接而不是动态的连接。

2.2.7 Java程序是动态连接的,从一个类到另一个类的引用是符号化的,,在静态连接中,类之间的引用只是直接的指针或者偏移量。在Java class文件中,指向另一个类的引用通过字符串清楚的标明了所指向的这个类的名字。如果引用指向一个字段的画,这个字段的名字和描述符会被详细说明。Java  class 文件不仅包含对其他类的字段和成员方法的符号引用,好包含对自身的字段和成员方法的符号引用。Java class 文件好包含了可选的调试信息,这些调试信息包含局部变量的名称和类型。这些方面使得Java  class文件逆向编译成Java源文件相当容易。

2.2.8防止逆向编译,使用混淆器来混淆你的class文件,通过更改类,字段,方法,局部变量的方法来修改类。

3.平台无关性

 3.1Java平台无关性主要通过Java平台自己,扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色。

 3.2Java语言,它的基础数据类型的值域和行为都是语言自己定义的。

 3.3Java class 文件,定义了一个特定于java虚拟机的二进制文件格式, 可以在任何平台上创建,也可以被任何平台的Java虚拟机装入运行。

  3.4Java不同平台的伸缩性:

      企业版(J2EE)  表明了服务器端的可用性

      标准版(J2SE)   提供了在浏览器中启动传统APPLET的功能和桌面环境下的Java平台

      微型版(J2ME)   嵌入式系统  和消费性电器市场

   3.5 在编写平台独立的Java程序时,必须遵从两条原则:

         不要依赖及时终结来达到程序的正确性

         不要依赖线程的优先级来达到程序的正确性

   4安全性

     4.1 Java安全模型侧重于保护终端用户免受从网络下载的,来自不可靠源的。恶意程序的侵犯。Java提供了一个用户可配置的“沙箱”,在沙箱中放置不可靠的Java程序,沙箱对不可靠程序的活动进行了限制,程序可以在沙箱的安全边界内做任何事,但是不能进行任何跨越这些边界的举动。

4.3基本沙箱

   组成Java沙箱的基本组件:

      类装载器结构

      Class文件检验器

       内置于Java虚拟机的安全特性

       安全管理器及API

类装载器和安全管理器可以由用户指定,类装载器体系结构在三个方面对Java的沙箱起作用,(1)它防止恶意代码去干涉善意代码(2) 它守护了被信任边界(3)它将代码归入某类,该类确定了代码可以进行哪些操作。

 

   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值