Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

复制代码
我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研)
记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结+网上借鉴)
希望大家能一起发现问题和补充,也欢迎讨论👏👏👏

文章目录

Java基础概念和常识

Java的语言特点

  • 平台无关性:Java的"编写一次,运行无处不在"哲学是其最大的特点之一。Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。
  • 面向对象:Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(OOP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
  • 内存管理:Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。

JVM、JDK、JRE三者关系

关系图:

  • JVM:Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。

    • 作用:将Java字节码 (java编译器生成)解释或编译成机器码,并且执行。

    • 功能:内存管理、垃圾回收、安全性等

  • JDK : JDK(Java Development Kit)是一个功能齐全的 Java 开发工具包,供开发者使用,用于创建和编译 Java 程序。它包含了 JRE(Java Runtime Environment),以及编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试器)、jconsole(监控工具)、javap(反编译工具)等。

  • JRE :是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。

Java的解释器和编译器

  • 编译型 :编译型语言会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。
  • 解释型 :解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。

在字节码(.class)到机器码的过程中会有解释和编译两种方式

  • 在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。
  • 有些方法和代码块是经常需要被调用的(也就是所谓的热点代码 ),所以后面引进了 JIT(Just in Time Compilation) 编译器,而 JIT 属于运行时编译。

AOT技术

JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译。

  • 优点

    • 相比JIT效率更高。

    • AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。

  • 缺点

    • AOT 编译无法支持 Java 的一些动态特性,如反射、动态代理、动态加载、JNI(Java Native Interface)等。

Java和C++的区别

  • 编译与解释

    • Java编译解释共存,一处编译随处运行。

    • c++是编译型的,换个操作系统要重新编译。

  • 内存访问

    • Java 不提供指针来直接访问内存,程序内存更加安全。

    • C++提供指针访问内存

  • 继承

    • Java 的类是单继承的(但是java接口可以多继承)

    • C++ 支持多重继承(一个类可以从多个基类派生)

  • 垃圾回收

    • Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
  • 重载

    • Java只支持方法重载

    • C++支持方法重载和操作符重载

相关推荐
The Future is mine21 分钟前
Python计算经纬度两点之间距离
开发语言·python
Enti7c22 分钟前
HTML5和CSS3的一些特性
开发语言·css3
腥臭腐朽的日子熠熠生辉27 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
爱吃巧克力的程序媛29 分钟前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
ejinxian29 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之34 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
独好紫罗兰1 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿