写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。

目录:
1.Java和JVM简介
        Java的跨平台性
        JVM跨语言的平台
        JVM的位置、作用特点
2.Java代码执行流程
3.栈的指令集架构和寄存器的指令集架构
4.JVM的生命周期

1.Java和JVM简介

1.1Java的跨平台性

我们都知道java是可以跨平台的,其实我们字节码文件本身就可以跨平台的,不同操作系统有不同版本的JVM,但是对字节码文件的识别都是一样的

1.2JVM跨语言的平台

其实我们Java虚拟机不是说只能解释Java的字节码文件,还能解释其他语言的字节码文件,只不过需要我们在编译其他的语言的时候,编译器遵循JVM的规范,那么JVM就可以对其进行解释也就是说Java虚拟机不关心运行在其内部的程序是何种语言编写的而只是关心字节码文件

1.3JVM的位置、作用特点

1.JVM的位置

2.JVM的作用和特点

2.Java代码的执行流程

Java源代码---->编译器(前端编译器)---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。
字节码文件:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。

我们看上图可以发现一个java源代码变成机器指令有两个编译的过程

  1. 前端编译:把java源码编译成字节码文件
  2. 后端编译:就是JIT编译器,把字节码指令编译成机器指令

3.JVM的指令架构

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则
基于寄存器的指令集架构。

基于栈式架构的特点:

  • 设计和实现更简单,适用于资源受限的系统;
  • 避开了寄存器的分配难题:使用零地址指令方式分配。 即是一个栈的操作,我们只需要关心栈顶
  • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小, [但相比于寄存器操作更多,一会儿会有解释]编译器容易实现
  • 不需要硬件支持,可移植性更好,更好实现跨平台。栈是一个内存层面,不跟硬件打交道

基于寄存器架构的特点:

  • 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虛 拟机。
  • 指令集架构则完全依赖硬件,可移植性差
  • 性能优秀和执行更高效: 因为基于cpu,比较快,对硬件耦合度较高
  • 花费更少的指令去完成一项操作。
  • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令 和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。

举个例子:我们同样进行2+3的操作,基于栈和寄存器的计算流程如下:

上边是基于栈,下边是基于寄存器的

我们可以发现完成一个指令,栈的指令集小,但指令多,寄存器指令集大,指令少

总结:

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台, 指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

4.JVM的生命周期

4.1JVM的启动

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

4.2JVM的执行
  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
4.3JVM的退出
  • 程序正常执行结束
  • 程序异常或错误而异常终止
  • 操作系统错误导致终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

JVM与Java的体系结构(JVM入门知识体系总结)相关推荐

  1. 深入理解JVM:Java语言与JVM关系

    在那个电闪雷鸣,群鸟环绕的夜晚,一个不为人知的语言Oak诞生了,此时正值1991年4月份,气温舒适,百花齐放.然而Oak的诞生并没有得到人们的关注,直到1995年5月23号,Oak决定正是更名为Jav ...

  2. 入门Java开发,这三大知识体系你要知道

    成为高级的Java开发工程师是每个学Java小伙伴的初衷,高级的Java开发工程师不仅意味着有更好的薪资,更代表着个人在行业中的水平.所谓的高级Java在不同的角度有不同的理解,在小千看来,从Java ...

  3. Java多线程,并发核心知识体系总结

    目录 Java底层原理: 线程终止--interrupt 线程安全--运算结果出错, 活跃性问题:死锁.活锁.饥饿锁, 对象发布和初始化的线程安全 Java三兄弟--JVM内存结构,Java内存模型, ...

  4. 机器学习入门知识体系

    IT派 - {技术青年圈} 持续关注互联网.大数据.人工智能领域 关注 往期精彩回顾 重大改变!Excel即将接入Python!办公软件也要革命 入门十大Python机器学习算法(附代码) 女博士实名 ...

  5. 架构师入门知识体系树

    在网上看到的一个架构师培训课程的知识体系树,参考下. 课程简介: 本课程针对软件团队中的架构师和专业设计人员,全面阐述架构的范围,把握方法,以及关键实践.涉及:应用架构,逻辑架构,实现架构.在课程中, ...

  6. 架构师培训入门知识体系树--转载

    原文:http://javatar.iteye.com/blog/109730 在网上偶然看到的一个架构师培训课程的介绍,呵,从整个大纲上没看到什么亮点,但也算个知识体系树,可以参考下. 课程简介: ...

  7. JVM内存与垃圾回收篇——JVM与Java体系结构

    前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM GC问题,但却无从下手. 新项目上线,对各种JVM参数设 ...

  8. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  9. (第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候需要做我的智力进步! 感 ...

最新文章

  1. 找Java培训机构需要注意那些
  2. 【6】font-size 字体属性
  3. Apollo快速使用
  4. mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句
  5. SP2010开发和VS2010专家食谱--第三章节--高级工作流(2)--为沙盒解决方案创建自定义活动...
  6. 数字化转型的4个阶段,从报表到可视化再到数据平台,谁更重要?
  7. java开发_mysql中获取数据库表描述_源码下载
  8. android 获取屏幕的宽和高
  9. 苹果新操作系统realityOS曝光
  10. 20180330试试水
  11. java batik_Java Batik框架画SVG图 JSVGCanvas
  12. Cadence全家桶Capture+Allegro流程-5-编辑焊盘并制作封装
  13. c语言如何用气泡法编程最大 最小值,[c语言冒泡排序法]C语言冒泡排序法详解
  14. jsp fakePath
  15. C语言读取松下PLC数据,松下PLC数据表在程序中的使用
  16. 遇到安装3dmax2020版本时出现1603错误时解决方法
  17. Openssl(版本1.1.1)源码中的RSA加解密算法实现分析
  18. Sql Server 02
  19. 富途牛牛A股数据API使用基础教程
  20. 真 彻底 Navicat导入Excel文件表时无法打开的四种解决办法

热门文章

  1. vue脚手架创建项目步骤
  2. jdbc查看网络状态
  3. CLR Via CSharp读书笔记(29) - 混合线程同步构造
  4. myisam 表锁优化参考
  5. wind2008中如何显示隐藏文件/夹
  6. 默认路由、静态路由、动态路由
  7. MVP open day 2009 (二)
  8. sklearn数据集变换
  9. 十 Java集合框架(2):Set接口
  10. 【收藏】Kubernetes学习之路(二十二)之Pod资源调度