为什么java不是最强的语言而JVM确可以叫做最强的虚拟机呢?

简介: 为什么java不是最强的语言而JVM确可以叫做最强的虚拟机呢?

了解jvm的历史

简介


关于java虚拟机 jvm 我们很多人都在开发中或多或少听到过这个词语,凡事java程序需要调优性能的提升一定绕不过java虚拟机的这关


java最强特性 跨平台的支持

1.png



大部分java开发人员,都会在项目中用过java平台相关的高精尖的技术,但是对于底层支持的JVM却了解甚少


如何看待上层框架和底层支持


有一定工作经验的人开发人员,会觉得SSM和微服务才是java技术的核心和重点,基础的技术凑活就好,非也,小冷也见过一些只知道追逐新兴技术但是确练string类中有一个可以反转字符串的方法都不知道,这是一种“病态”的发展趋势


很多的大牛,他们对自己的领域底层的理解是十分的深刻的,无数的框架也是建立在底层技术和设计思路之上的,强化自己对底层的理解对于调节和性能会有很大的帮助,谁不喜欢又快功能又全的后端呢


如果把核心类库的一些API 必做是数学公式的话,那么ava虚拟机的就好比是推算公式的推导过程。


现在的计算机系统体系对我们来说越来越遥远,在不了解底层实现方式的前提下,通过高级语言很容易编写代码,但是事实上计算机并不认识高级语言。


为什么我们要学习jvm


面试需要 尤其是大厂 对于jvm的重视程度还是比较高的

中高级程序员必备技能

项目管理,调优的需要

追求极客的精神

垃圾回收算法,JIT,底层原理

java可能不是最好的语言但是JVM是最强的虚拟机

编程语言之间

2.png



这是一张20年的编程语言热度排行,


其实大家对这个事情一直是争论不看的,其实没有最好的编程语言,只有最适合的使用场景


JVM : write once, run anywhere


在任意一个地方编写,在任意平台上运行


java虚拟机通过java编译出的字节码文件,来实现全平台的运行

3.png



为什么我们要说JVM是最强的虚拟机呢,应为它不只是可以多平台运行java,也有很多的语言可以在jvm上实现跨平台,只要他们遵循JVM的规则生成对应的字节码文件

4.png



java虚拟机和他的强大特性如下几点


Java 7 发布之后,java虚拟机的设计者们通过 JSR-292规范基本实现了在java虚拟机平台运行非java程序语言编写的程序

Java虚拟机根本不关心运行的在其内部的是什么语言,他只关心最后生成的字节码文件,也就是说java虚拟机拥有与语言无关性的特质,他并不是单纯的和java终身绑定,只要其他的语言编译结果满足JVM的内部指令集,符号表和一些规范,就可以被虚拟机识别并且装载运行

字节码


我们平时说的java字节码其实是指java语言编译之后的字节码,其他的变成语言在jvm执行的字节码格式都是一样的,所以我们把他们统称为 JVM字节码

不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行

JVM虚拟机与java语言并没有必然的联系,他只是与特定的二进制文件格式 Class文件有所关联,Class文件中包含了java虚拟机的指令集和符号表

混合特性


Java平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特 定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。

试想一下,在一个项目之中,并行处理用clojure语言编写,展示层使用

JRuby/Rails,中间层则是Java,每个应用层都将使用不同的编程语言来完

成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任 何困难,就像使用自己语言的原生API一样方便,因为它们最终都运行在一个 虚拟机之上。

对这些运行于Java虚拟机之上、Java之外的语言,来自系统级的、底层

的支持正在迅速增强,以JSR-292为核心的一系列项目和功能改进(如Da

Vinci Machine项目、Nashorn引擎、InvokeDynamic指令、

java.lang.invoke包等),推动Java虚拟机从“Java语言的虚拟机”向 “多语言虚拟机”的方向发展。


虚拟机和JVM虚拟机

虚拟机

简介

就是一台虚拟的计算机,用软件来执行一系列虚拟的计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机


Visual Box和VMware 就属于系统虚拟机,他们完全是对物理计算机的仿真,提供了一个可以运行完整操作的软件平台

程序虚拟机典型的代表就是Java虚拟机,他专门为执行单个计算机程序而设计在java虚拟机中执行的指令我们称为java字节码指令

不管是什么类型的虚拟机,上面运行的软件都是被限制在虚拟机提供的资源中


Java虚拟机

Java虚拟机是一台执行Java字节码的虚拟计算机,他拥有独立的运行机制,其运行的java字节码也未必由Java语言编译而成,


JVM平台的各种语言可以共享JVM带来的跨平台性和优秀的垃圾回收器以及稳定的即时编译器

Java技术的核心就是JVM虚拟机 ,因为所有的java程序都运行在java虚拟机的内部

总结

JVM虚拟机的作用 : 二进制字节码的运行环境


负责装载字节码,到其内部,编译为对应平台上机器指令执行,每一条java指令,JVM虚拟机规范中有详细的定义,如:怎么取到操作数,处理操作数,处理的结果在哪里


特定


一次编译 到处运行

自动内存管理

自动垃圾回收功能


相关文章
|
2月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
129 4
|
17天前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
51 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
8天前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
15 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
7天前
|
存储 算法 Java
深入理解Java虚拟机(JVM)及其优化策略
【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
23 1
|
8天前
|
安全 Java API
🌟探索Java宇宙:深入理解Java技术体系与JVM的奥秘
本文深入探讨了Java技术体系的全貌,从Java语言的概述到其优点,再到Java技术体系的构成,以及JVM的角色。旨在帮助Java开发者全面了解Java生态,提升对Java技术的认知,从而在编程实践中更好地发挥Java的优势。关键词:Java, JVM, 技术体系, 编程语言, 跨平台, 内存管理。
20 2
|
8天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
21 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
19天前
|
监控 Java
Java的JVM如何优化?
Java的JVM如何优化?
44 3
|
1月前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
28天前
|
存储 算法 Java
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
本文介绍了 JVM 的内存区域划分、类加载过程及垃圾回收机制。内存区域包括程序计数器、堆、栈和元数据区,每个区域存储不同类型的数据。类加载过程涉及加载、验证、准备、解析和初始化五个步骤。垃圾回收机制主要在堆内存进行,通过可达性分析识别垃圾对象,并采用标记-清除、复制和标记-整理等算法进行回收。此外,还介绍了 CMS 和 G1 等垃圾回收器的特点。
94 0
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
|
1月前
|
安全 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法的深度融合
在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
25 1