JVM 入门基础概念篇

简介: 哈喽,大家好,我是指北君。PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!

作为一个JavaCoder,相信大家面试,或者日常工作少不了和JVM打交道,那么贴心的指北君将通过一系列文章,给大家详细介绍JVM。

从源码到运行、类加载,再到内存分配和垃圾回收,以及JVM调优的技巧与实战。

理论-实战-面试三结合,带大家剖析整个JVM知识体系,一站解决JVM问题。

1、Oracle Java SE 8 产品组件

10.jpg

通常来说 Java平台标准版(Java SE)包括 Java SE开发工具包(JDK)和Java SE运行时环境(JRE)。

JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库,Java虚拟机和其他组件;JDK包括JRE以及编译器和调试器等命令行开发工具,可以用来开发Java应用程序 。

PS:JDK包含JRE,我们通常安装JDK的同时也会安装JRE。

2、虚拟机

上图的最下一行Java虚拟机是被 JRE 所包含,我们在介绍Java虚拟机时,先了解虚拟机的概念。

所谓虚拟机,其实就是一台虚拟的机器,可以用来执行一系列虚拟的命令。大体上虚拟机可以分为两种:系统虚拟机和程序虚拟机。

①、系统虚拟机:是完全对物理计算机的仿真,可以说和一台真实的PC操作系统没什么区别。比如常用的 Vmare 以及 Visual Box 软件,通过这些软件能够模拟出具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

②、程序虚拟机:专门为执行单个计算程序而产生,最典型的就是Java虚拟机,在Java虚拟机中执行字节码文件命令。

3、Java虚拟机

了解了什么是虚拟机,我们再看什么是 Java虚拟机。

Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域,它与Java语言没有必然的联系,只与特定的二进制文件——class 文件格式关联(字节码文件),可以通过Java语言或者其他语言编写的程序编译成class文件,然后在Java虚拟机上运行。Java虚拟机有以下二个特点:

①、语言无关

Java虚拟机只和class文件关联,所以只要你编写程序的语言能够编译成class文件,那么都能够在Java虚拟机上运行。


11.jpg

②、平台无关

Java从诞生之初就宣传的一个口号:一次编写,到处运行。

也就是说Java是一个跨平台的语言,那么Java是如何实现跨平台的呢?

其实Java之所以跨平台是因为Java虚拟机的适配,不同的系统实现不同的Java虚拟机。Java虚拟机就相当于操作系统和应用程序之间的中介,每种平台安装适应该平台的Java虚拟机,那么我们编写的程序当然能够在任意平台运行。

4、Java虚拟机种类

商用虚拟机:

①、Sun HotSpot

该虚拟机性能优越,是 sun JDK1.3 及以后所有 sun JDK 版本默认的虚拟机,使用最为广泛,本系列博客就是以这个虚拟机为平台进行介绍。


12.jpg②、BEA  JRockit

JRockit 虚拟机是 BEA 公司于 2002 年从 Appeal Virtual Machines 收购获得的虚拟机。它是一款面向服务器硬件和服务端使用场景高度优化过的虚拟机,曾经号称是“世界上速度最快的虚拟机”。由于专注于服务端应用,它的内部不包含解析器的实现,全部代码都靠即时编译器编译后执行。

③、IBM J9

J9 虚拟机是 IBM 公司单独开发的高性能虚拟机,它并不独立出售,而是作为 IBM 公司各种产品的执行平台,IBM 把它定义为一个可以适应从嵌入式设备到大型企业级应用的、高可移植性的Java运行平台。

④、Sun Classic

这个虚拟机很原始,是 JDK1.0 时代使用的Java虚拟机,是各种虚拟机的鼻祖,它的内部不存在即时编译器,只能使用纯解释的方式运行。

⑤、Sun Exact

这是 Sun 公司在 HotSpot 之外的另一个虚拟机,在 JDK1.2 时代曾短暂的投入过商用,它和 HotSpot 同时开发,但最终被 HotSpot 取代。

⑥、Apache Harmony

Harmony 是 Apache 软件基金会主导的、开源的、独立的、实际兼容与 JDK1.5 和 JDK1.6的虚拟机实现,它间接催生了 Google Android 平台的 Dalvik 虚拟机,Android 的影响力现在有多大不用多说,目前已经是最成功的的数码设备通用平台。但是由于它的 TCK 授权问题,直接导致 Apache 与 Oracle 的决裂,从而退出了 JCP 组成,这是近代 Java 阵营遇到的最严重的分裂危机。

嵌入式虚拟机

①、Dalvik

Dalvik 虚拟机是 Google 等厂商合作开发的 Android 移动设备平台的核心组成部分之一,它执行 dex(Dalvik Executable) 文件而不是 class 文件,使用寄存器架构而不是栈架构,但是它的开发体系与Java有着千丝万缕的关系,可以直接使用大部分的 Java API、dex 文件可以直接从class文件转化而来。并且在 Android 2.2 中提供了即时编译器的实现,性能大大的提高。

②、KVM

在 Android、IOS 等智能手机操作系统出现之前,曾广泛应用于手机平台的一种虚拟机。

③、CDC/CLDC HotSpot

CDC和 CLDC HotSpot 分别是 Sun 针对高端嵌入式设备和中低端嵌入式设备的虚拟机,用来代替 KVM。

面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!




相关文章
|
6月前
|
Oracle Java 编译器
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
84 1
|
5月前
|
存储 监控 算法
|
6月前
|
缓存 运维 监控
JVM的基础入门(下)
JVM的基础入门(下)
96 0
|
6月前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
72 0
|
6月前
|
缓存 监控 Java
Java从入门到精通:3.3.1性能优化与调优——学习Java的性能优化技巧,如JVM调优
Java从入门到精通:3.3.1性能优化与调优——学习Java的性能优化技巧,如JVM调优
|
6月前
|
算法 安全 前端开发
JVM的基础入门(上)
JVM的基础入门(上)
113 0
|
存储 缓存 安全
【JVM】12. 垃圾回收相关概念(1)
12.1. System.gc()的理解 在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc() 调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效) 循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
|
6月前
|
Oracle IDE Java
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(下)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
64 1
|
6月前
|
存储 监控 算法
JVM入门手册(通俗版)
JVM入门手册(通俗版)
58 0
|
6月前
|
Java 程序员 PHP
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(上)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
61 0