你的位置:亚洲日韩欧美人成黄瓜_好嗨呦直播app下载_大胆西西人体gogo_美女下面直流白水视频_人妻中出无码一区二区_最新婬乱小说午夜视频_无码艳妇乳肉豪妇荡乳 > 黑人特大亚洲女娇小 >


青春期胸变软了是什么原因秉性 一次编译

发布日期:2022-09-23 07:01    点击次数:191


第一版主小说网美腿青春期胸变软了是什么原因

 

你是否也遭受过这些问题?

运行线上系统一刹卡死,系统无法拜谒,致使平直OOM 想处分线上JVM GC问题,但却无从下手 新形状上线,对各式JVM参数设立一脸懵逼,平直默许,然后就JJ了 每次口试都要再行背一遍JVM的一些旨趣办法性东西

这段告白语写的好,趁着在家办公学习下JVM,先列出举座常识点:

JVM解毒——JVM与Java体捆绑构

Java开发都知道JVM是Java编造机,上学时还用过的VM也叫编造机,先相比一波。

编造机与Java编造机

所谓编造机(Virtual Machine),等于一台编造的经营机。它是一款软件,用来扩充一系列编造经营机提醒。大体上,编造机不错分为系统编造机和门径编造机。

Visaual Box,VMware就属于系统编造机,它们十足是对物理经营机的仿真,提供了一个可运行无缺操作系统的软件平台 门径编造机的典型代表等于Java编造机,它成心为扩充单个经营机门径而诡计,在Java编造机中扩充的提醒咱们称为Java字节码提醒

JVM 是什么

JVM 是 Java Virtual Machine(Java编造机)的缩写,JVM是一种用于经营拓荒的门径,它是一个虚构的经营机,是通过在实验的经营机上仿真模拟各式经营机功能来罢了的。

Java编造机是二进制字节码的运行环境,负责装载字节码到其里面,施展/编译为对应平台的机器提醒扩充。每一条Java提醒,Java编造机门径中都有详备界说,如若何取操作数,若何处理操作数,处理恶果放在那边。

秉性

一次编译,到处运次(跨平台) 自动内存管制 自动垃圾回收功能

字节码

咱们平时所说的java字节码,指的是用java谈话编写的字节码,准确的说任何能在jvm平台上扩充的字节码体式都是一样的,是以应该统称为jvm字节码。

不同的编译器不错编译出相通的字节码文献,字节码文献也不错在不同的jvm上运行。

Java编造机与Java谈话莫得宠必的关连,它只与特定的二进制文献体式——Class文献体式关联,Class文献中包含了Java编造机提醒集(好像称为字节码、Bytecodes)和绚烂集,还有一些其他提拔信息。

Java代码扩充进程

JVM解毒——JVM与Java体捆绑构

JVM的位置

JVM是运行在操作系统之上的,它与硬件莫得平直的交互。

JDK(Java Development Kit) 是 Java 谈话的软件开发器具包(SDK)。JDK 物理存在,是 Java Language、Tools、JRE 和 JVM 的一个联结。

JVM解毒——JVM与Java体捆绑构 JVM解毒——JVM与Java体捆绑构

JVM举座结构

JVM解毒——JVM与Java体捆绑构

JVM的架构模子

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

两种架构之间的区别:

基于栈式架构的秉性诡计和罢了更简便,适用于资源受限的系统;遁藏了寄存器的分拨辛劳,使用零地址提醒方式分拨;提醒流中的提醒大部分是零地址提醒,其扩充进程依赖于操作栈。提醒集更小,编译器容易罢了;不需要硬件复古,可移植性更好,更好罢了跨平台 基于寄存器架构的秉性典型的诓骗是X86的二进制提醒集:比如传统的PC以及Android的Davlik编造机;提醒集架构则十足依赖硬件,可移植性差;性能优秀和扩充更高效;耗尽更少的提醒去完成一项操作;大部分情况下,基于寄存器架构的提醒集时时都以一地址提醒、二地址提醒和三地址提醒为主, 中文而基于栈式架构的提醒集却是以零地址提醒为主

由于跨平台性的诡计,Java的提醒都是把柄栈来诡计的。不同平台CPU架构不同,是以不可诡计为基于寄存器的,优点是跨平台,提醒集小,编译器容易罢了,纰谬是性能下落,罢了雷同的功能需要更多的提醒。

分析基于栈式架构的JVM代码扩充进程

参加class文献场地目次,扩充javap -v xx.class反瓦解(好像通过IDEA插件Jclasslib平直稽查),不错看到现时类对应的code区(汇编提醒)、腹地变量表、卓著表和代码行偏移量映射表、常量池等信息。

 

JVM解毒——JVM与Java体捆绑构

以上图中的 1+2 为例阐述:

Classfile /Users/starfish/workspace/myCode/starfish-learning/starfish-learn/target/classes/priv/starfish/jvm/JVM1.class   Last modified 2020-2-7; size 487 bytes   MD5 checksum 1a9653128b55585b2745270d13b17aaf   Compiled from "JVM1.java" public class priv.starfish.jvm.JVM1   SourceFile: "JVM1.java"   minor version: 0   major version: 52   flags: ACC_PUBLIC, ACC_SUPER Constant pool:    #1 = Methodref          #3.#22         //  java/lang/Object."<init>":()V    #2 = Class              #23            //  priv/starfish/jvm/JVM1    #3 = Class              #24            //  java/lang/Object    #4 = Utf8               <init>    #5 = Utf8               ()V    #6 = Utf8               Code    #7 = Utf8               LineNumberTable    #8 = Utf8               LocalVariableTable    #9 = Utf8               this   #10 = Utf8               Lpriv/starfish/jvm/JVM1;   #11 = Utf8               main   #12 = Utf8               ([Ljava/lang/String;)V   #13 = Utf8               args   #14 = Utf8               [Ljava/lang/String;   #15 = Utf8               i   #16 = Utf8               I   #17 = Utf8               j   #18 = Utf8               k   #19 = Utf8               MethodParameters   #20 = Utf8               SourceFile   #21 = Utf8               JVM1.java   #22 = NameAndType        #4:#5          //  "<init>":()V   #23 = Utf8               priv/starfish/jvm/JVM1   #24 = Utf8               java/lang/Object {   public priv.starfish.jvm.JVM1();     flags: ACC_PUBLIC     Code:       stack=1, locals=1, args_size=1          0: aload_0                 1: invokespecial #1                  // Method java/lang/Object."<init>":()V          4: return               LineNumberTable:         line 3: 0       LocalVariableTable:         Start  Length  Slot  Name   Signature                0       5     0  this   Lpriv/starfish/jvm/JVM1;    public static void main(java.lang.String[]);     flags: ACC_PUBLIC, ACC_STATIC     Code:       stack=2, locals=4, args_size=1          0: iconst_1      //冒号前的数字示意门径计数器的数,常量1入栈          1: istore_1      //保存到1的操作数栈中,这里的1示意操作数栈的索引位置          2: iconst_2                3: istore_2                4: iload_1       //加载          5: iload_2                 6: iadd          //常量出栈,乞降          7: istore_3      //存储到索引为3的操作数栈          8: return               LineNumberTable:         line 6: 0         line 7: 2         line 8: 4         line 9: 8       LocalVariableTable:         Start  Length  Slot  Name   Signature                0       9     0  args   [Ljava/lang/String;                2       7     1     i   I                4       5     2     j   I                8       1     3     k   I       MethodParameters: length = 0x5        01 00 0D 00 00  } 

JVM人命周期

编造机的启动

Java编造机的启动是通过诱骗类加载器(Bootstrap Class Loader)创建一个启动类(initial class)来完成的,这个类是由编造机的具体罢了指定的。

编造机的扩充

一个运行中的Java编造机有着一个昭彰的任务:扩充Java门径 门径启程点扩充时它才运行,门径甩手时它就罢手 扩充一个所谓的Java门径的时候,真的扩充的是一个叫做Java编造机的程度 你在清除台机器上运行三个门径,就会有三个运行中的Java编造机。 Java编造机老是启程点于一个main()方法,国产亚洲不卡精品这个方法必须是公有、复返void、只接受一个字符串数组。在门径扩充时,你必须给Java编造机指明这个包含main()方法的类名。

编造机的退出

有以下几种情况:

门径日常扩充甩手 门径在扩充进程中遭受了卓著或诞妄而卓著拒绝 由于操作系统出现诞妄而导致Java编造机程度拒绝 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,而况Java安全管制器也允许此次exit或halt操作 除此除外,JNI(Java Native Interface)门径描摹了用JNI Invocation API来加载或卸载Java编造机时,Java编造机的退出情况

Java和JVM门径

Java Language and Virtual Machine Specifications

JVM发展历程

JDK 版块升级不单是体当今谈话和功能秉性上,还包括了其编译和扩充的 Java 编造机的升级。

1990年,在Sun经营机公司中,由Patrick Naughton、MikeSheridan及James Gosling率领的小组Green Team,开发出的新的门径谈话,定名为Oak,后期定名为Java 1995年,Sun细腻发布Java和HotJava产物,Java初度公开亮相 1996 年,JDK 1.0 发布时,提供了纯施展扩充的 Java 编造机罢了:Sun Classic VM。 1997 年,JDK 1.1 发布时,编造机莫得做变更,依然使用 Sun Classic VM 手脚默许的编造机 1998 年,JDK 1.2 发布时,提供了运行在 Solaris 平台的 Exact VM 编造机,但此时照旧用 Sun Classic VM 手脚默许的 Java 编造机,同期发布了JSP/Servlet、EJB门径,以及将Java分红J2EE、J2SE、J2ME 2000 年,JDK1.3 发布,默许的 Java 编造机由 Sun Classic VM 改为 Sun HotSopt VM,而 Sun Classic VM 则手脚备用编造机 2002 年,JDK 1.4 发布,Sun Classic VM 退出商用编造机舞台,平直使用 Sun HotSpot VM 手脚默许编造机一直到当今 2003年,Java平台的Scala细腻发布,同庚Groovy也加入了Java阵营 2004年,JDK1.5发布,同期JDK1.5更名为JDK5.0 2006年,JDK6发布,同庚,Java开源并修复了OpenJDK。言之成理,Hotspot编造机也成为了OpenJDK默许编造机 2008年,Oracle收购BEA,得到了JRockit编造机 2010年,Oracle收购了Sun,取得Java商标和HotSpot编造机 2011年,JDK7发布,在JDK1.7u4中,细腻启用了新的垃圾回收器G1 2014年,JDK8发布,用元空间MetaSpace取代了PermGen 2017年,JDK9发布,将G1设立为默许GC,替代CMS

Sun Classic VM

宇宙上第一款商用 Java 编造机。1996年跟着Java1.0的发布而发布,JDK1.4时十足被淘汰; 这款编造机里面只提供施展器; 如若使用JIT编译器,就需要进行外挂。然则一朝使用了JIT编译器,JIT就会吸收编造机的扩充系统,施展器就不再职责,施展器和编译器不可相助职责; 当今hotspot内置了此编造机

Exact VM

它的扩充系统如故具备了当代高性能编造机的雏形:如热门探伤、两级即时编译器、编译器与瓦解器搀和职责模式等; 使用准确式内存管制:编造机不错知道内存中某个位置的数据具体是什么类型; 在交易诓骗上只存在了很片晌的时候就被更优秀的 HotSpot VM 所取代

Sun HotSpot VM

它是 Sun JDK 和 OpenJDK 中所带的编造机,亦然咫尺使用领域最广的 Java 编造机; 承袭了 Sun 之前两款商用编造机的优点(如准确式内存管制),也使用了许多我方新的技能上风,如热门代码探伤技能(通过扩充计数器找出最具有编译价值的代码,然后告知 JIT 编译器以方法为单元进行编译; Oracle 公司差异收购了 BEA 和 Sun,并在 JDK8 的时候,整合了 JRokit VM 和 HotSpot VM,如使用了 JRokit 的垃圾回收器与 MissionControl 处事,使用了 HotSpot 的 JIT 编译器与搀和的运行时系统。

BEA JRockit VM

专注于处事器端诓骗,里面不包含瓦解器罢了; 堪称是宇宙上最快的JVM

IBM J9 VM

全称:IBM Technology for Java Virtual Machine,简称IT4J,里面代号:J9 商场定位于HotSpot接近,处事器端、桌面诓骗、镶嵌式等多用途VM 咫尺是有影响力的三大商用编造机之一

编造机有好多,此外还有Azul VM、Liquid VM、Apache Harmony、TaobaoJVM、Graal VM等

 



    热点资讯

    相关资讯