Java基础

Java程序运行机制

Java既有解释性语言特性,也具有编译型语言特性,Java程序先编译后解释

Java运行机制和JVM

Java程序如何执行的

  1. Java语言编写的程序先经过编译,编译后生成一种平台无关的字节码(*.class文件)(编译性语言在此步骤生成特定平台的机器码)。
  2. 生成的字节码可以通过使用Java解释器来执行。

Java编译器

编译器负责将Java文件编译生成一种平台无关的字节码。

  • 编译器接受各平台上的JVM所提供的相同编程接口
  • 编译器只用面向虚拟机,生成虚拟机所需代码

JVM

JVM是负责解释执行字节码的部分。

  • JVM是可以运行Java字节码文件的虚拟计算机
  • 所有平台上的JVM向编译器提供相同的编程接口。
  • JVM根据平台不同,向下适应不同的平台

Sun公司指定的Java统一细节

  • 指令集
  • 寄存器
  • 类文件的格式
  • 垃圾回收栈
  • 存储区

Java程序的基本规则

Java程序的组织形式

Java程序必须以类的形式存在,是Java程序的最小程序单位。

  • Java程序不允许可执行语句、方法等成分独立存在,所有的程序必须放在类定义里

  • 最简单的Java程序:

  • class Test
    {
        
    }
    
  • ⭐如果类能被解释器直接解释执行,则这个类里必须包含main方法,同时main方法必须使用public static void来进行修饰

  • class Test
    {
        public static void main(String[] args)
        {
            
        }
    }
    
  • main方法是Java程序的入口

Java源文件命名规则

  • Java程序源文件的后缀必须是.java
  • 通常情况下,Java程序源文件的主文件名可以是任意的,
    • 特例:如果Java程序定义了一个public类,该源文件的主文件名必须与该public类的类名相同(例如helloworld程序)
    • 由此特例可知:Java程序源文件里最多只能定义一个public类
    • 一个Java源文件里可以包含多个类定义,但是最多只能包含一个public类

Java源文件中没有包含public类时的建议规范

  1. 一个Java源文件之定义一个类,不同的类使用不同的源文件定义
  2. 将每个源文件中单独定义的类都定义成public
  3. 保持Java源文件的主文件名与该源文件中定义的public类同名

Java垃圾回收机制

显示垃圾回收缺点:

  1. 程序忘记及时回收无用内存,会导致内存泄漏,降低系统性能
  2. 程序错误地回收程序核心类库的内存,从而导致系统崩溃

Java程序内存回收机制

Java程序的内存回收与分配都是JRE在后台自动进行的。

  • JRE负责回收不再使用的内存,这种机制被称为垃圾回收(Garbage Collection,GC)

JRE回收内存机制

  • JRE通常会提供一条超级线程来进行检测和控制
  • 通常在CPU空闲或内存不足时自动进行内存回收
    • 程序员无法精确控制垃圾回收的时间和顺序
  • Java的堆内存时一个运行时数据区,用以保存类的实例(对象)
  • Java虚拟机的堆内存中存储着正在运行的应用程序所建立的所有对象,这些对象不需要程序通过代码来显示释放
    • 堆内存是由垃圾回收来负责的,所有的JVM在在实现时都有一个由垃圾回收机制管理的堆内存
  • 垃圾回收机制是一种动态存储管理技术

JVM垃圾回收机制优点

  1. 提高编程效率,以来垃圾回收机制可以缩短对存储器管理的时间
  2. 垃圾回收机制保护程序的完整性

JVM潜在的缺点

  • 垃圾回收机制会增加资源的开销,应i昂程序的性能
    • 进行垃圾回收时会有额外的处理器时间开销
  • 垃圾回收算法不完备性,早期的内存回收机制不能保证完全回收内存

JVM垃圾回收特点

  • 垃圾回收机制的目的是回收无用对象的内存空间,这些内存空间都是JVM堆内存里的内存空间,垃圾回收只能回收内存资源(数据库连接、磁盘IO等都不能回收)
  • 将想让内存回收机制回收的对象的引用变量设置为null,可以按时内存回收机制回收该对象,加快垃圾回收
  • 由于不同的JVM采用了不同的垃圾回收机制,和不同的垃圾回收算法,因此它由可能是定时发生,有可能是CPU空闲时发生,也有可能等到内存小号出现极限时发生。
    • 可以通过finalize()方法或System.gc()方法来进行内存回收,但不能精确控制内存回收机制
  • 垃圾回收的精确性表现
    1. 垃圾回收机制能够精确地标记alive的对象(能够完全回收所有废弃对象的前提,不能确保的话就会造成内存泄漏)
    2. 垃圾回收器能够精确地定位对象之间的引用关系。(实现归并和赋值等算法的必要条件,通过这种引用关系,可以保证所有的对象都被可靠地回收,从而保证所有对象能够被重新分配,减少内存碎片的产生)
  • JVM有不同的内存回收实现
    • 有的当垃圾回收开始时就停止应用程序运行,
    • 有的当垃圾回收运行时,同时允许应用程序的线程运行
    • 有的在同一时间垃圾回收多线程运行
posted @ 2021-09-01 23:15  Aloduin  阅读(34)  评论(0)    收藏  举报