电子商务网站开发概述,网站备案好不好,app开发与网站建设难度,宁德网络推广JVM体系跟着尚硅谷的康师傅学习 JVM内存与垃圾回收概述 除了大部分的Java开发 人员#xff0c;除了会在项目中使用到与Java平台相关的框架#xff0c;与API#xff0c;对于Java的虚拟机了解甚少。但是也需要我们知道如何处理OOM#xff0c;SOF异常#xff0c;除了… JVM体系跟着尚硅谷的康师傅学习 JVM内存与垃圾回收概述 除了大部分的Java开发 人员除了会在项目中使用到与Java平台相关的框架与API对于Java的虚拟机了解甚少。但是也需要我们知道如何处理OOMSOF异常除了程序运行的底层硬件的优化还需要我们知道项目的在jvm层面的性能监控与调优。
高级语言的执行的过程 Java VS C Java (C)--
垃圾收集机制为我们打理了很多繁琐的工作大大提高了开发的效率但是垃圾收集也不是万能的懂得JVM内部的内存结构、工作机制是设计高扩展性应用和诊断运行时问题的基础也是Java工程师进阶的必备能力。C语言需要程序员自己来分配内存和回收内存对于高手来说可能更加舒服但是对于普通开发者如果技术实力不够很容易造成内存泄漏。而Java全部交给JVM进行内存分配和回收这也是一种趋势减少程序员的工作量。书籍推荐 周志明老师的《深入理解Java虚拟机》【第三版】这本书非常推荐看 Java的生态圈 Java不仅是一个开发语言更像是一个平台
Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了它更是一个平台、一种文化、一个社区。
作为一个平台Java虚拟机扮演着举足轻重的作用 Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分作为一种文化Java几乎成为了“开源”的代名词。 第三方开源软件和框架。如Tomcat、StrutsMyBatisSpring等。就连JDK和JVM自身也有不少开源的实现如openJDK、Harmony。作为一个社区Java拥有全世界最多的技术拥护者和开源社区支持有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件都可以看到Java的身影。其应用形式之复杂、参与人数之众多也令人咋舌。
Java-垮平台的语言 一次编译到处运行 write once, run anywhere Java可能不是最强大的语言但JVM一定是最强大的虚拟机。
Java发展的重大事件
1990年在Sun计算机公司中由Patrick Naughton、MikeSheridan及James Gosling领导的小组Green Team开发出的新的程序语言命名为Oak后期命名为Java1995年Sun正式发布Java和HotJava产品Java首次公开亮相。1996年1月23日Sun Microsystems发布了JDK 1.0。1998年JDK1.2版本发布。同时Sun发布了JSP/Servlet、EJB规范以及将Java分成了J2EE、J2SE和J2ME。这表明了Java开始向企业、桌面应用和移动设备应用3大领域挺进。2000年JDK1.3发布Java HotSpot Virtual Machine正式发布成为Java的默认虚拟机。2002年JDK1.4发布古老的Classic虚拟机退出历史舞台。2003年年底Java平台的scala正式发布同年Groovy也加入了Java阵营。2004年JDK1.5发布。同时JDK1.5改名为JavaSE5.0。2006年JDK6发布。同年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发布。在JDK1.7u4中正式启用了新的垃圾回收器G1。2017年JDK9发布。将G1设置为默认GC替代CMS同年IBM的J9开源形成了现在的Open J9社区2018年Android的Java侵权案判决Google赔偿Oracle计88亿美元同年Oracle宣告JavagE成为历史名词JDBC、JMS、Servlet赠予Eclipse基金会同年JDK11发布LTS版本的JDK发布革命性的ZGC调整JDK授权许可2019年JDK12发布加入RedHat领导开发的Shenandoah GC
Open JDK开源免费 与 Oracle JDK商业付费 在JDK11之前Oracle JDK中还会存在一些Open JDK中没有的闭源的功能。但在JDK11中我们可以认为Open JDK和Oracle JDK代码实质上已经达到完全一致的程度了。主要的区别就是两者更新周期不一样
JVM的作用
一次编译到处运行自动内存管理自动垃圾回收功能
JVM的位置 JVM的整体结构以HotSpot VM为例 JVM的架构模型 基于栈的指令集架构
设计和实现更简单适用于资源受限的系统避开了寄存器的分配难题使用零地址指令方式分配指令流中的指令大部分是零地址指令其执行过程依赖于操作栈。指令集更小编译器容易实现不需要硬件支持可移植性更好更好实现跨平台基于寄存器的指令集架构
典型的应用是x86的二进制指令集比如传统的PC以及Android的Davlik虚拟机。指令集架构则完全依赖硬件与硬件的耦合度高可移植性差性能优秀和执行更高效花费更少的指令去完成一项操作在大部分情况下基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主而基于栈式架构的指令集却是以零地址指令为主JVM的生命周期 虚拟机的启动 Java虚拟机的启动是通过引导类加载器bootstrap class loader创建一个初始类initial class来完成的这个类是由虚拟机的具体实现指定的。
虚拟机的执行
一个运行中的Java虚拟机有着一个清晰的任务执行Java程序程序开始执行时他才运行程序结束时他就停止执行一个所谓的Java程序的时候真真正正在执行的是一个叫做Java虚拟机的进程
虚拟机的退出
有如下的几种情况 程序正常执行结束 程序在执行过程中遇到了异常或错误而异常终止 由于操作系统用现错误而导致Java虚拟机进程终止 某线程调用Runtime类或System类的exit()方法或Runtime类的halt()方法并且Java安全管理器也允许这次exit()或halt()操作。 除此之外JNIJava Native Interface规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时Java虚拟机的退出情况。
注 本编文章以HotSpot虚拟机为例其他的vm不了解