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++支持方法重载和操作符重载

相关推荐
egekm_sefg11 分钟前
【微服务】SpringCloud 1-9章
java
计算机-秋大田19 分钟前
基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
等一场春雨1 小时前
Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
java·spring boot·分布式
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
码农研究僧1 小时前
Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
java·redis·缓存·缓存策略
落霞的思绪1 小时前
令牌主动失效机制实现——Redis登录优化
java·redis
苏-言2 小时前
SpringMVC 实战指南:文件上传
java·后端·spring
m0_748250742 小时前
SpringMVC详解
java
nanzhuhe2 小时前
tomcat状态一直是Exited (1)
java·tomcat
m0_748241122 小时前
【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())
java·后端·spring