婺源网站建设,天津seo排名效果好,wordpress简约新闻自媒体主题,搜索引擎优化的目的是什么1、为什么要学习JVM作为Java工程师的你曾被伤害过吗#xff1f;你是否也遇到过这些问题#xff1f;运行着的线上系统突然卡死#xff0c;系统无法访问#xff0c;甚至直接OOM想解决线上JVM GC问题#xff0c;但却无从下手新项目上线#xff0c;对各种JVM参数设置一脸茫然…1、为什么要学习JVM作为Java工程师的你曾被伤害过吗你是否也遇到过这些问题运行着的线上系统突然卡死系统无法访问甚至直接OOM想解决线上JVM GC问题但却无从下手新项目上线对各种JVM参数设置一脸茫然直接默认吧然后就JJ了每次面试之前都要重新背一遍JVM的一些原理概念性的东西然而面试官却经常问你在实际项目中如何调优VM参数如何解决GC、OOM等问题一脸懵逼大部分Java开发人员除会在项目中使用到与Java平台相关的各种高精尖技术对于Java技术的核心Java虚拟机了解甚少这个时候想解决以上疑难杂症是非常困难的。2、JVM、JavaApi、框架、应用程序之间的关系3、2023年2月TIOBE指数4、JVM跨语言的平台Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了它更是一个平台、一种文化、一个社区。作为一个平台Java虚拟机扮演着举足轻重的作用Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分作为灯种文化Java几乎成为了“开源”的代名词。第三方开源软件和框架。如Tomcat、StrutsMyBatisSpring等。就连JDK和JVM自身也有不少开源的实现如openJDK、Harmony。作为一个社区Java拥有全世界最多的技术拥护者和开源社区支持有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件都可以看到Java的身影。其应用形式之复杂、参与人数之众多也令人咋舌。刚开始JVM专为java开发书写一次到处运行随着Java7的正式发布Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的它只关心“字节码”文件。也就是说Java虚拟机拥有语言无关性并不会单纯地与Java语言“终身绑定”只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息它就是一个有效的字节码文件就能够被虚拟机所识别并装载运行。5、字节码我们平时说的java字节码指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为jvm字节码。不同的编译器可以编译出相同的字节码文件字节码文件也可以在不同的JVM上运行。Java虚拟机与Java语言并没有必然的联系它只与特定的二进制文件格式—Class文件格式所关联Class文件中包含了Java虚拟机指令集或者称为字节码、Bytecodes和符号表还有一些其他辅助信息。6、如何真正搞懂JVMJava虚拟机非常复杂要想真正理解它的工作原理最好的方式就是自己动手编写一个自己动手写一个Java虚拟机难吗正所谓“会者不难难者不会”下定信心一定可以搞定。7、Java虚拟机作用、特点Java虚拟机就是二进制字节码的运行环境负责装载字节码到其内部解释/编译为对应平台上的机器指令执行。每一条Java指令Java虚拟机规范中都有详细定义如怎么取操作数怎么处理操作数处理结果放在哪里。特点一次编译到处运行自动内存管理自动垃圾回收功能8、JVM整体结构HotSpot VM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。在今天Java程序的运行性能早已脱胎换骨已经达到了可以和C/C程序一较高下的地步。9、Java代码执行流程10、JVM架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构另外一种指令集架构则是基于寄存器的指令集架构。具体来说这两种架构之间的区别基于栈式架构的特点设计和实现更简单适用于资源受限的系统避开了寄存器的分配难题使用零地址指令方式分配指令流中的指令大部分是零地址指令其执行过程依赖于操作栈。指令集更小编译器容易实现不需要硬件支持可移植性更好更好实现跨平台基于寄存器架构的特点典型的应用是x86的二进制指令集比如传统的PC以及Android的Davlik虚拟机指令集架构则完全依赖硬件可移植性差性能优秀和执行更高效花费更少的指令去完成一项操作在大部分情况下基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主而基于栈式架构的指令集却是以零地址指令为主总结由于跨平台性的设计Java的指令都是根据栈来设计的。不同平台CPU架构不同所以不能设计为基于寄存器的。优点是跨平台指令集小编译器容易实现缺点是性能下降实现同样的功能需要更多的指令。11、JVM的生命周期11.1、虚拟机的启动Java虚拟机的启动是通过引导类加载器bootstrap class loader创建一个初始类initial class来完成的这个类是由虚拟机的具体实现指定的。11.2、虚拟机的执行一个运行中的Java虚拟机有着一个清晰的任务执行Java程序。程序开始执行时他才运行程序结束时他就停止。执行一个所谓的Java程序的时候真真正正在执行的是一个叫做Java虚拟机的进程。11.3、虚拟机的退出有如下的几种情况程序正常执行结束程序在执行过程中遇到了异常或错误而异常终止由于操作系统用现错误而导致Java虚拟机进程终止某线程调用Runtime类或system类的exit方法或Runtime类的halt方法并且Java安全管理器也允许这次exit或halt操作。除此之外JNIJava Native Interface规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时Java虚拟机的退出情况。后续文章我们按照代码执行流程开始详解JVM喜欢的朋友记得关注、订阅收藏。下篇文字我们讲解 JVM 中 “类加载子系统”。