持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
1 JVM与Java体系结构
1.1 前言
你是否也遇到过这些问题?
- 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM
- 想解决线上JVM GC问题,但却无从下手
- 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了
- 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼
大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
我们为什么要学习JVM?
-
面试的需要(BATJ、TMD,PKQ等面试都爱问)
-
中高级程序员必备技能
- 项目管理、调优的需求
-
追求极客的精神
- 比如:垃圾回收算法、JIT、底层原理
垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率。但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。
1.2 参考书目
《深入理解Java 虚拟机》
1.3 Java及JVM简介
TIOBE语言热度排行榜: index | TIOBE - The Software Quality Company
| Programming Language | 2021 | 2016 | 2011 | 2006 | 2001 | 1996 | 1991 | 1986 |
|---|---|---|---|---|---|---|---|---|
| C | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 1 |
| Java | 2 | 1 | 1 | 1 | 3 | 26 | - | - |
| Python | 3 | 5 | 6 | 8 | 27 | 19 | - | - |
| C++ | 4 | 3 | 3 | 3 | 2 | 2 | 2 | 8 |
| C# | 5 | 4 | 5 | 7 | 13 | - | - | - |
| Visual Basic | 6 | 13 | - | - | - | - | - | - |
| JavaScript | 7 | 8 | 10 | 9 | 10 | 32 | - | - |
| PHP | 8 | 6 | 4 | 4 | 11 | - | - | - |
| SQL | 9 | - | - | - | - | - | - | - |
| R | 10 | 17 | 31 | - | - | - | - | - |
| Lisp | 34 | 27 | 13 | 14 | 17 | 7 | 4 | 2 |
| Ada | 36 | 28 | 17 | 16 | 20 | 8 | 5 | 3 |
| (Visual) Basic | - | - | 7 | 6 | 4 | 3 | 3 | 5 |
世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言
字节码
- 我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
如何真正搞懂JVM?
- Java虚拟机非常复杂,要想真正理解它的工作原理,最好的方式就是自己动手编写一个!
- 天下事有难易乎? 为之,则难者亦易矣;不为,则易者亦难矣
- 推荐书籍《自己动手写Java虚拟机》
1.4 Java发展的重大事件
1.5 虚拟机与Java虚拟机
Java虚拟机
-
Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部。
-
作用:Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
-
特点
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收功能