主要特点:OOP、GC、JVM
OOP:面向对象编程(Object-Oriented Programming)
1. 特点:封装:将数据和操作数据的方法封装在一起,限制对内部状态的直接访问,提高安全性。
2. 继承:允许新类从已有类继承属性和方法,促进代码重用。
3. 多态:允许不同类的对象通过相同接口调用方法,使得同一操作可以适应不同的数据类型。
4. 抽象:通过定义类和接口,提供对复杂系统的简化视图,专注于重要的细节。
OOP 提高了代码的可维护性、可重用性和可扩展性,使得软件开发更加高效。
GC:垃圾回收(Garbage Collection)
Java 的 GC(垃圾回收,Garbage Collection)是自动内存管理的一部分,用于回收不再使用的对象所占用的内存,从而防止内存泄漏和优化内存使用。GC 的主要目标是自动检测和清理不再被引用的对象,帮助开发者减少手动管理内存的负担。
主要特点:
1. 自动化:开发者无需手动释放对象内存,GC 会自动进行。
2. 标记-清除算法:GC 通过标记不再使用的对象,然后清除它们以回收内存。
3. 内存压缩:在某些情况下,GC 还会进行内存压缩,减少内存碎片,提高内存使用效率。
JVM:Java 虚拟机(Java Virtual Machine)
是 Java 程序运行的核心组件,它负责将 Java 字节码转换为机器代码,从而使 Java 程序能够在不同的平台上运行。
跨平台性:通过 JVM,Java 程序可以在不同的操作系统和硬件平台上运行,遵循“一次编写,到处运行”的原则。原因在于Java程序并没有直接运行在平台上,而是运行在 JVM 上。不同的平台(Linux、Unix、Windows),有不同的适配当前平台的 JVM(所以JVM 不跨平台),JVM 屏蔽了不同平台的差异性,提供给了 java程序一致性的接口,所以 Java 程序可以跨平台运行。这种设计使得 Java 成为广泛应用于企业级开发和移动应用的语言。
Java执行流程:
1. 源码(.java)经过编译(javac)后得到的字节码文件(.class),首先会由字节码加载器将其加载进 JVM;
2. 紧接着,字节码校验器会对字节码进行校验;
3. 最后,再由字节码解释器将字节码翻译成机器码交由操作系统执行
内存管理:JVM 管理程序的内存,包括堆内存、栈内存等,并负责垃圾回收(GC),自动回收不再使用的对象内存。
安全性:JVM 提供了一个安全的执行环境,通过类加载器和字节码验证,确保运行的代码是安全的,防止恶意代码的执行。
多线程支持:JVM 内置对多线程的支持,允许多个线程并发执行,提高程序的性能。
为了提升JAVA的运行效率,JVM 提供了JIT(Just-In-Time)编译器,即能够在运行时将热点代码(高频次执行的代码)编译成机器码,这种情况下热点代码属于编译执行,而不是解释执行。
Java 的执行机制
Java 的执行机制结合了编译和解释的优点:
-
编译阶段:
- Java 源代码(.java 文件)通过 Java 编译器(javac)编译成字节码(.class 文件)。字节码是一种中间表示,不同于直接的机器代码。
-
执行阶段:
- Java 字节码通过 Java 虚拟机(JVM)执行。JVM 既可以解释执行字节码,也可以使用即时编译(JIT)将字节码编译成机器代码并执行,从而提高性能。
总结
- 编译执行:一次性将源代码转化为机器码,运行速度快,但需要完整编译过程。
- 解释执行:逐行执行源代码,灵活性高,但运行速度较慢。
- Java 的方式:将源代码编译为字节码,通过 JVM 结合解释执行和即时编译,实现跨平台和性能的平衡。
JDK、JRE、JVM三者之间的关系
JDK是 (Java Development Kit)java 开发工具包,包括Java运行环境JRE 和一些Java 开发工具(编译工具javac.exe、文档生成器javadoc.exe、打包工具jar.exe、调试器jdb.exe 等),另外还包含一些Java基础的类库;
JRE(Java Runtime Enveirment)是Java运行时环境,包括运行时类库和JVM,在解释执行字节码的时候JVM需要调用解释所需要的类库lib;如果只是想运行Java程序,计算机中只需要安装JRE即可。
JVM(Java Virtual Machine) Java虚拟机,是实现Java跨平台的最核心部分,提供的接口不依赖于底层操作系统和机器硬件