1. JVM与Java体系结构
abstract
本文主要讲述JVM体系结构、Java发展过程中的重大事件、各个厂商的JVM对比、JVM架构模型的特点等内容。
本文复制自:https://www.yuque.com/u21195183/jvm/zq4x30#5f2a98fb
1.1 前言
作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?
- 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM
- 想解决线上JVM GC问题,但却无从下手
- 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了
- 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼
大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
开发人员如何看待上层框架
一些有一定工作经验的开发人员,打心眼儿里觉得SSM、微服务等上层技术才是重点,基础技术并不重要,这其实是一种本末倒置的“病态”。
如果我们把核心类库的API比做数学公式的话,那么Java虚拟机的知识就好比公式的推导过程。
我们为什么要学习JVM?
- 面试的需要(BATJ、TMD,PKQ等面试都爱问)
- 中高级程序员必备技能
- 项目管理、调优的需求
- 追求极客的精神
- 比如:垃圾回收算法、JIT、底层原理
Java vs C++
垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。
1.2 面向人群及参考书目
笔记
附上以上电子书的Z-Library下载地址,如果不知道如何访问Z-Library,请参考文章《最全电子书下载网站》
1.3 Java及JVM简介
世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言
JVM:跨语言的平台
Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。
- 作为一个平台,Java虚拟机扮演着举足轻重的作用
- Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分
- 作为灯种文化,Java几乎成为了“开源”的代名词。
- 第三方开源软件和框架。如Tomcat、Struts,MyBatis,Spring等。
- 就连JDK和JVM自身也有不少开源的实现,如openJDK、Harmony。
- 作为一个社区,Java拥有全世界最多的技术拥护者和开源社区支持,有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件,都可以看到Java的身影。其应用形式之复杂、参与人数之众多也令人咋舌。
每个语言都需要转换成字节码文件,最后转换的字节码文件都能通过Java虚拟机进行运行和处理
- 随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。
- Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件。也就是说Java虚拟机拥有语言无关性,并不会单纯地与Java语言“终身绑定”,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。
字节码
- 我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
- 不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。
- Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式—Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。