JVM深入学习(一)-JVM与JAVA体系结构

简介: JVM深入学习(一)-JVM与JAVA体系结构

Jvm的特点:

  1. 一次编译,到处运行(字节码)
  2. 自动内存管理
  3. 自动的垃圾回收功能


Jvm是跨平台,跨语言的


Jvm的位置

Jvm是一款程序虚拟机,区别于Vmvare这种系统虚拟机


1.1 jvm整体结构




  1. class文件由 类装载器子系统 加载初始化到内存中
  2. 运行时数据区中的方法区和堆是线程共享的,其他三个是每个线程都有各自的
  3. 执行引擎由编译器,JIT编译器,垃圾回收器组成


1.2 java代码的执行过程



  1. 源代码经过java编译器翻译成字节码
  2. jvm把字节码转换为机器能识别的机器码
  3. cpu执行代码


1.3 jvm架构模型


指令集架构分为两种


  1. 基于栈的指令集架构 (jvm)
  1. 设计实现简单,适用于资源受限的系统
  2. 零地址指令方式分配
  3. 指令集小
  4. 不需要硬件支持,移植性好,跨平台
  1. 基于寄存器的指令集架构
  1. 典型的应用 x86的二进制指令集,pc/android
  2. 基于寄存器,对于硬件耦合性较高,可移植性差
  3. 执行更加高效
  4. 指令更少
  5. 指令集大部分以一地址指令,二地址指令,三地址指令为主


1.4 jvm生命周期


  1. 启动
  1. 通过引导类加载器创建一个初始类,这个类具体由具体的虚拟机实现来确定
  1. 执行
  1. 执行java程序,当一个java程序被执行的时候,其实是jvm在执行
  1. 退出
  1. 程序正常执行结束
  2. 程序执行异常/错误而终止
  3. 操作系统出现异常
  4. 线程调用System/Runtime类中的exit/halt方法,且java安全管理器也允许操作


1.5 jvm各版本


  1. classic vm 最开始的vm
  2. exact vm 高性能vm的雏形,有了jit即时编译器
  3. HotSpot vm 现代的vm
  4. JRockit 没有解释器,只有JIT即时编译器,号称最快的vm,被oracle收购,整合到HotSpotVM
  5. J9 ibm的vm,也号称最快的vm,但是仅限于ibm自家的产品
  6. Graal vm 下一代vm 真正的跨语言vm
  7. TaobaoVm 淘宝基于hotSpot深度定制的vm,无法通用,对硬件有要求


目录
相关文章
|
2月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
113 4
|
21天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
19天前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
42 18
|
1月前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
105 6
【Java学习】多线程&JUC万字超详解
|
1月前
|
安全 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法的深度融合
在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
19 1
|
2月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
135 0
|
2月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
41 0
|
2月前
|
缓存 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法
【8月更文挑战第27天】在Java的演进历程中,invokedynamic指令的引入和Lambda表达式的出现无疑是两大重要里程碑。它们不仅深刻改变了Java的开发模式和性能表现,还极大地推动了Java在函数式编程和动态语言支持方面的进步。本文将从技术角度浅析JVM中的invokedynamic指令及其与Java Lambda语法的紧密联系。
41 0
|
3月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
31 0
|
3月前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
56 10
下一篇
无影云桌面