JVM01_JVM与Java体系结构(上)

57 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 Language20212016201120062001199619911986
C12221111
Java2111326--
Python35682719--
C++43332228
C#545713---
Visual Basic613------
JavaScript781091032--
PHP864411---
SQL9-------
R101731-----
Lisp3427131417742
Ada3628171620853
(Visual) Basic--764335

世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言

字节码

  • 我们平时说的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虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

  • 特点

    • 一次编译,到处运行
    • 自动内存管理
    • 自动垃圾回收功能