当前位置: 首页 > news >正文

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

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

文章目录

    • Java基础概念和常识
      • Java的语言特点
      • JVM、JDK、JRE三者关系
      • Java的解释器和编译器
      • AOT技术
      • Java和C++的区别

Java基础概念和常识

Java的语言特点

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

JVM、JDK、JRE三者关系

关系图:

img

  • 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程序运行所需的运行环境。

img

Java的解释器和编译器

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

img

在字节码(.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++支持方法重载和操作符重载

http://www.lryc.cn/news/522749.html

相关文章:

  • 2025.1.16——三、supersqli 绕过|堆叠注入|handler查询法|预编译绕过法|修改原查询法
  • 浅谈计算机网络03 | 现代网络组成
  • Red Hat8:搭建FTP服务器
  • EWM 批次管理 / Batch Management
  • Java 面试题 - ArrayList 和 LinkedList 的区别,哪个集合是线程安全的?
  • 初学SpringBoot
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论和实操解析
  • AWS S3 跨账户访问 Cross Account Access
  • Ubuntu20.4和docker终端指令、安装Go环境、安装搜狗输入法、安装WPS2019:保姆级图文详解
  • Kotlin语言的正则表达式
  • npm的包管理
  • 深度学习在文本情感分析中的应用
  • 【大模型系列篇】数字人音唇同步模型——腾讯开源MuseTalk
  • Formality:参考设计/实现设计以及顶层设计
  • RPA赋能内容创作:打造小红书入门词语图片的全自动化流程
  • RPC 源码解析~Apache Dubbo
  • VS Code--常用的插件
  • 深度学习 Pytorch 张量的索引、分片、合并以及维度调整
  • 神州数码--制作wifi
  • Web前端开发技术之HTMLCSS知识点总结
  • 客户案例:致远OA与携程商旅集成方案
  • 【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题
  • 【Python】FastAPI入门
  • JavaScript系列(32)-- WebAssembly集成详解
  • wps数据分析000002
  • 无降智o1 pro——一次特别的ChatGPT专业模式探索
  • 前端:前端开发任务分解 / 开发清单
  • 【Django自学】Django入门:如何使用django开发一个web项目(非常详细)
  • 面试经验分享-回忆版某小公司
  • WebSocket——推送方案选型