Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

    • 字节码篇
      • Java语言及Java生态圈
        • Oracle JDK与Open JDK什么关系?
        • JDK与JVM是什么关系?
        • 如何理解Java是跨平台的语言?
        • 如何理解JVM跨语言的平台?
        • Java不存在内存溢出?内存泄漏?
        • Java发展的几个重大事件?
        • 说说你认识的JVM?
        • JVM的生命周期?
        • 重点说下HotSpot?
      • JVM的架构与知识脉络图
        • 能否画出JVM架构图?
        • JVM有哪几块知识脉络?
    • 类的加载
    • 内存结构
    • 执行引擎
    • 垃圾回收
    • 字节码指令
  • JUC

  • Golang

  • Kubernetes

  • 硅谷课堂

  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • JVM
Iekr
2022-09-09
目录

字节码篇

# 字节码篇

# Java 语言及 Java 生态圈

# Oracle JDK 与 Open JDK 什么关系?

image-20220909142611946

End users and developers looking for free JDK versions: Oracle OpenJDK offers the same features and performance as Oracle JDK under the GPL license .

  1. Oracle JDK 根据二进制代码许可协议获得许可,而 OpenJDK 根据 GPL v2 许可获得许可。 使用 Oracle 平台时会产生一些许可影响。如 Oracle 宣布的那样,在没有商业许可的情况下,在 2019 年 1 月之后发布的 Oracle Java SE 8 的公开更新将无法用于商业,商业或生产用途。但是,OpenJDK 是完全开源的,可以自由使用。
  2. Oracle JDK 的构建过程基于 OpenJDK,因此 OpenJDK 与 Oracle JDK 之间没有技术差异。
  3. Oracle JDK 具有良好的 GC 选项和更好的渲染器,而 OpenJDK 具有更少的 GC 选项,并且由于其包含自己的渲染器的分布,因此具有较慢的图形渲染器选项。

# JDK 与 JVM 是什么关系?

image-20220909142734567

# 如何理解 Java 是跨平台的语言?

image-20220909142759190

“write once, run anywhere.”

  • 当 Java 源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译
  • 这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp 等有强大的解释器。跨平台似乎已经快成为一门语言必选的特性。

# 如何理解 JVM 跨语言的平台?

image-20220909142931875

Java 虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心 “字节码” 文件。

Java 不是最强大的语言,但是 JVM 是最强大的虚拟机。

# Java 不存在内存溢出?内存泄漏?

image-20220909143124614

Java = (c++)--;

垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得 JVM 内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是 Java 工程师进阶的必备能力。

# Java 发展的几个重大事件?

  • 2000 年,JDK 1.3 发布,Java HotSpot Virtual Machine 正式发布,成为 Java 的默认虚拟机。
  • 2002 年,JDK 1.4 发布,古老的 Classic 虚拟机退出历史舞台。
  • 2003 年年底,Java 平台的 Scala 正式发布,同年 Groovy 也加入了 Java 阵营。
  • 2006 年,JDK 6 发布。同年,Java 开源并建立了 OpenJDK。顺理成章,Hotspot 虚拟机也成为了 OpenJDK 中的默认虚拟机。
  • 2007 年,Java 平台迎来了新伙伴 Clojure。
  • 2008 年,Oracle 收购了 BEA, 得到了 JRockit 虚拟机。
  • 2009 年,Twitter 宣布把后台大部分程序从 Ruby 迁移到 Scala,这是 Java 平台的又一次大规模应用。
  • 2010 年,Oracle 收购了 Sun,获得 Java 商标和最具价值的 HotSpot 虚拟机。此时,Oracle 拥有市场占用率最高的两款虚拟机 HotSpot 和 JRockit,并计划在未来对它们进行整合:HotRockit. JCP 组织管理:Java 语言
  • 2011 年,JDK7 发布。在 JDK 1.7u4 中,正式启用了新的垃圾回收器 G1。
  • 2017 年,JDK9 发布。将 G1 设置为默认 GC,替代 CMS (被标记为 Deprecated)
  • 同年,IBM 的 J9 开源,形成了现在的 Open J9 社区
  • 2018 年,Android 的 Java 侵权案判决,Google 赔偿 Oracle 计 88 亿美元
  • 同年,JDK11 发布,LTS 版本的 JDK, 发布革命性的 ZGC, 调整 JDK 授权许可
  • 2019 年,JDK12 发布,加入 RedHat 领导开发的 Shenandoah GC

# 说说你认识的 JVM?

  • Sun Classic VM --> 解释型
  • Exact VM --> Solaris
  • SUN 公司的 HotSpot VM
  • BEA 的 JRockit --> 不包含解释器,服务器端,JMC
  • IBM 的 J9
  • KVM 和 CDC/CLDC Hotspot
  • Azul VM
  • Liquid VM
  • Apache Harmony
  • Microsoft JVM
  • TaobaoJVM
  • Graal VM --> 2018 年,“Run Programs Faster Anywhere”

image-20220909143707638

  • Dalvik VM

  • 其他 JVM: Java Card VM、Squawk VM、JavaInJava、Maxine VM、Jikes RVM、IKVM.NET、Jam VM、Cacao VM、Sable VM、Kaffe、Jelatine JVM、Nano VM、MRP、Moxie JVM

# JVM 的生命周期?

虚拟机的启动 Java 虚拟机的启动是通过引导类加载器 (bootstrap class loader) 创建一个初始类 (initial class) 来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的退出有如下的几种情况:

  • 某线程调用 Runtime 类或 System 类的 exit 方法,或 Runtime 类的 halt 方法,并且 Java 安全管理器也允许这次 exit 或 halt 操作。
  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统出现错误而导致 Java 虚拟机进程终止

# 重点说下 HotSpot?

  • SUN 的 JDK 版本从 1.3.1 开始运用 HotSpot 虚拟机, 2006 年底开源,主要使用 C++ 实现,JNI 接口部分用 C 实现。
  • HotSpot 是较新的 Java 虚拟机,使用 JIT (Just in Time) 编译器,可以大大提高 Java 运行的性能。
  • Java 原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢。而 HotSpot 将常用的部分代码编译为本地 (原生,native) 代码,这样显着提高了性能。
  • HotSpot JVM 参数可以分为规则参数 (standard options) 和非规则参数 (non-standard options)。 规则参数相对稳定,在 JDK 未来的版本里不会有太大的改动。 非规则参数则有因升级 JDK 而改动的可能。

# JVM 的架构与知识脉络图

# 能否画出 JVM 架构图?

image-20220909144157742

这个架构可以分成三层看:

  • 最上层:javac 编译器将编译好的字节码 class 文件,通过 java 类装载器执行机制,把对象或 class 文件存放在 jvm 划分内存区域。
  • 中间层:称为 Runtime Data Area,主要是在 Java 代码运行时用于存放数据的,从左至右为方法区 (永久代、元数据区)、堆 (共享,GC 回收对象区域)、栈、程序计数器、寄存器、本地方法栈 (私有)。
  • 最下层:解释器、JIT (just in time) 编译器和 GC(Garbage Collection,垃圾回收器)

详细图

image-20220909144354187

# JVM 有哪几块知识脉络?

image-20220909144853411

编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
登录注册
类的加载

← 登录注册 类的加载→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式