anyuan2002.com - vwin网

查找: 您的方位主页 > 电脑频道 > 编程代码 > 阅览资讯:java中JVM的原理

java中JVM的原理

2019-03-31 04:06:54 来历:www.anyuan2002.com 【

一、java虚拟机的生命周期:

Java虚拟机的生命周期 一个运转中的Java虚拟机有着一个明晰的使命:履行Java程序。程序开端履行时他才运转,程序结束时他就中止。你在同一台机器上运转三个程序,就会有三个运转中的Java虚拟机。 Java虚拟机总是开端于一个main()方法,这个方法有必要是公有、回来void、直承受一个字符串数组。在程序履行时,你有必要给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被履行的线程初始化为程序的初始线程。程序中其他的线程都由他来发动。Java中的线程分为两种:看护线程 (daemon)和一般线程(non-daemon)。看护线程是Java虚拟机自己运用的线程,比方担任废物搜集的线程便是一个看护线程。当然,你也可 以把自己的程序设置为看护线程。包含Main()方法的初始线程不是看护线程。 只需Java虚拟机中还有一般的线程在履行,Java虚拟机就不会中止。假如有满足的权限,你能够调用exit()方法停止程序。

二、java虚拟机的体系结构:

在Java虚拟机的标准中界说了一系列的子体系、内存区域、数据类型和运用指南。这些组件构成了Java虚拟机的内部结构,他们不只仅为Java虚拟机的完结供给了明晰的内部结构,更是严厉规则了Java虚拟机完结的外部行为。 
   每一个Java虚拟机都由一个类加载器子体系(class loader subsystem),担任加载程序中的类型(类和接口),并赋予仅有的姓名。每一个Java虚拟机都有一个履行引擎(execution engine)担任履行被加载类中包含的指令。
   程序的履行需求必定的内存空间,如字节码、被加载类的其他额定信息、程序中的方针、方法的参数、回来值、本地变量、处理的中心变量等等。Java虚拟机将 这些信息通通保存在数据区(data areas)中。尽管每个Java虚拟机的完结中都包含数据区,可是Java虚拟机标准对数据区的规则却十分的笼统。许多结构上的细节部分都留给了 Java虚拟机完结者自己发挥。不同Java虚拟机完结上的内存结构千差万别。一部分完结或许占用许多内存,而其他以下或许只占用很少的内存;一些完结可 能会运用虚拟内存,而其他的则不运用。这种比较精粹的Java虚拟机内存规约,能够使得Java虚拟机能够在广泛的渠道上被完结。
   数据区中的一部分是整个程序共有,其他部分被独自的线程操控。每一个Java虚拟机都包含方法区(method area)和堆(heap),他们都被整个程序同享。Java虚拟机加载并解析一个类今后,将从类文件中解析出来的信息保存与方法区中。程序履行时创立的 方针都保存在堆中。 
   当一个线程被创立时,会被分配只归于他自己的PC寄存器“pc register”(程序计数器)和Java仓库(Java stack)。当线程不掉用本地方法时,PC寄存器中保存线程履行的下一条指令。Java仓库保存了一个线程调用方法时的状况,包含本地变量、调用方法的 参数、回来值、处理的中心变量。调用本地方法时的状况保存在本地方法仓库中(native method stacks),或许再寄存器或许其他非渠道独立的内存中。
   Java仓库有仓库块(stack frames (or frames))组成。仓库块包含Java方法调用的状况。当一个线程调用一个方法时,Java虚拟机会将一个新的块压到Java仓库中,当这个方法运转结束时,Java虚拟机会将对应的块弹出并扔掉。
   Java虚拟机不运用寄存器保存核算的中心成果,而是用Java仓库在寄存中心成果。这是的Java虚拟机的指令更紧凑,也更简单在一个没有寄存器的设备上完结Java虚拟机。 
   图中的Java仓库中向下增加的,PC寄存器中线程三为灰色,是由于它正在履行本地方法,他的下一条履行指令不保存在PC寄存器中。

三、类加载器子体系:

Java虚拟机中的类加载器分为两种:原始类加载器(primordial class loader)和类加载器方针(class loader objects)。原始类加载器是Java虚拟机完结的一部分,类加载器方针是运转中的程序的一部分。不同类加载器加载的类被不同的命名空间所切割。
   类加载器调用了许多Java虚拟机中其他的部分和java.lang包中的许多类。比方,类加载方针便是java.lang.ClassLoader子类 的实例,ClassLoader类中的方法能够拜访虚拟机中的类加载机制;每一个被Java虚拟机加载的类都会被表明为一个 java.lang.Class类的实例。像其他方针相同,类加载器方针和Class方针都保存在堆中,被加载的信息被保存在方法区中。
   1、加载、衔接、初始化(Loading, Linking and Initialization)
类加载子体系不只仅担任定位并加载类文件,他依照以下严厉的进程作了许多其他的作业:(具体的信息拜见第七章的“类的生命周期”)
     1)、加载:寻觅并导入指定类型(类和接口)的二进制信息
     2)、衔接:进行验证、预备和解析
        ①验证:确保导入类型的正确性
        ②预备:为类型分配内存并初始化为默许值
        ③解析:将字符引证解析为直接饮用
     3)、初始化:调用Java代码,初始化类变量为适宜的值
   2、原始类加载器(The Primordial Class Loader)
   每个Java虚拟机都有必要完结一个原始类加载器,他能够加载那些恪守类文件格局并且被信赖的类。可是,Java虚拟机的标准并没有界说怎么加载类,这由 Java虚拟机完结者自己决议。关于给定类型名的类型,原始莱加载器有必要找到那个类型名加“.class”的文件并加载入虚拟机中。
   3、类加载器方针
   尽管类加载器方针是Java程序的一部分,可是ClassLoader类中的三个方法能够拜访Java虚拟机中的类加载子体系。
     1)、protected final Class defineClass(…):运用这个方法能够收支一个字节数组,界说一个新的类型。
     2)、protected Class findSystemClass(String name):加载指定的类,假如现已加载,就直接回来。
     3)、protected final void resolveClass(Class c):defineClass()方法仅仅加载一个类,这个方法担任后续的动态衔接和初始化。
   具体的信息,拜见第八章“衔接模型”( The Linking Model)。
   4、命名空间
   当多个类加载器加载了同一个类时,为了确保他们姓名的仅有性,需求在类名前加上加载该类的类加载器的标识。具体的信息,拜见第八章“衔接模型”( The Linking Model)。

四、方法区:

在Java虚拟机中,被加载类型的信息都保存在方法区中。这写信息在内存中的组织方法由虚拟机的完结者界说,比方,虚拟机作业在一个“little- endian”的处理器上,他就能够将信息保存为“little-endian”格局的,尽管在Java类文件中他们是以“big-endian”格局保 存的。规划者能够用最适兼并地机器的表明格局来存储数据,以确保程序能够以最快的速度履行。可是,在一个只需很小内存的设备上,虚拟机的完结者就不会占用 很大的内存。
   程序中的一切线程同享一个方法区,所以拜访方法区信息的方法有必要是线程安全的。假如你有两个线程都去加载一个叫Lava的类,那只能由一个线程被容许去加载这个类,另一个有必要等候。
   在程序运转时,方法区的巨细是可变的,程序在运转时能够扩展。有些Java虚拟机的完结也能够通过参数也订制方法区的初始巨细,最小值和最大值。
   方法区也能够被废物搜集。由于程序中的内由类加载器动态加载,一切类或许变成没有被引证(unreferenced)的状况。当类变成这种状况时,他就可 能被废物搜集掉。没有加载的类包含两种状况,一种是真实的没有加载,另一个种是“unreferenced”的状况。具体信息拜见第七章的类的生命周期 (The Lifetime of a Class)。
   1、类型信息(Type Information)
     每一个被加载的类型,在Java虚拟机中都会在方法区中保存如下信息:
     1)、类型的全名(The fully qualified name of the type)
     2)、类型的父类型的全名(除非没有父类型,或许弗雷方法java.lang.Object)(The fully qualified name of the typeís direct superclass)
     3)、给类型是一个类仍是接口(class or an interface)(Whether or not the type is a class4)、类型的修饰符(publicprivateprotectedstaticfinalvolatile,transient等)(The typeís modifiers)
     5)、一切父接口全名的列表(An ordered list of the fully qualified names of any direct superinterfaces)
     类型全名保存的数据结构由虚拟机完结者界说。除此之外,Java虚拟机还要为每个类型保存如下信息:
     1)、类型的常量池(The constant pool for the type)
     2)、类型字段的信息(Field information)
     3)、类型方法的信息(Method information)
     4)、一切的静态类变量(十分量)信息(All class (static) variables declared in the type, except constants)
     5)、一个指向类加载器的引证(A reference to class ClassLoader)
     6)、一个指向Class类的引证(A reference to class Class)

     1)、类型的常量池(The constant pool for the type)
     常量池中保存中一切类型是用的有序的常量调集,包含直接常量(literals)如字符串、整数、浮点数的常量,和对类型、字段、方法的符号引证。常量池 中每一个保存的常量都有一个索引,就像数组中的字段相同。由于常量池中保存中一切类型运用到的类型、字段、方法的字符引证,所以它也是动态衔接的首要对 象。具体信息拜见第六章“The Java Class File”。
     2)、类型字段的信息(Field information)
     字段名、字段类型、字段的修饰符(publicprivateprotectedstaticfinalvolatile,transient等)、字段在类中界说的次序。
     3)、类型方法的信息(Method information)
     方法名、方法的回来值类型(或许是void)、方法参数的个数、类型和他们的次序、字段的修饰符(publicprivateprotectedstaticfinalvolatile,transient等)、方法在类中界说的次序
     假如不是笼统和本地本法还需求保存
     方法的字节码、方法的操作数仓库的巨细和本地变量区的巨细(稍候有具体信息)、反常列表(具体信息拜见第十七章“Exceptions”。)
     4)、类(静态)变量(Class Variables)
     类变量被一切类的实例同享,即便不通过类的实例也能够拜访。这些变量绑定在类上(而不是类的实例上),所以他们是类的逻辑数据的一部分。在Java虚拟机运用这个类之前就需求为类变量(non-final)分配内存
     常量(final)的处理方法于这品种变量(non-final)不相同。每一个类型在用到一个常量的时分,都会仿制一份到自己的常量池中。常量也像类变 量相同保存在方法区中,只不过他保存在常量池中。(或许是,类变量被一切实例同享,而常量池是每个实例独有的)。Non-final类变量保存为界说他的 类型数据(data for the type that declares them)的一部分,而final常量保存为运用他的类型数据(data for any type that uses them)的一部分。概况拜见第六章“The Java Class FileThe Java Class File”
     5)、指向类加载器的引证(A reference to class ClassLoader)
     每一个被Java虚拟机加载的类型,虚拟机有必要保存这个类型是否由原始类加载器或许类加载器加载。那些被类加载器加载的类型有必要保存一个指向类加载器的引 用。当类加载器动态衔接时,会运用这条信息。当一个类引证另一个类时,虚拟机有必要保存那个被引证的类型是被同一个类加载器加载的,这也是虚拟机保护不同命 名空间的进程。概况拜见第八章“The Linking Model”
     6)、指向Class类的引证(A reference to class Class)
     Java虚拟机为每一个加载的类型创立一个java.lang.Class类的实例。你也能够通过Class类的方法:
public static Class forName(String className)来查找或许加载一个类,并获得相应的Class类的实例。通过这个Class类的实例,咱们能够拜访Java虚拟机方法区中的信息。具体参照Class类的JavaDoc。
   2、方法列表(Method Tables)
   为了更有用的拜访一切保存在方法区中的数据,这些数据的存储结构有必要通过细心的规划。一切方法区中,除了保存了上边的那些原始信息外,还有一个为了加速存 取速度而规划的数据结构,比方方法列表。每一个被加载的非笼统类,Java虚拟机都会为他们发作一个方法列表,这个列表中保存了这个类或许调用的一切实例 方法的引证,报错那些父类中调用的方法。概况拜见第八章“The Linking Model”

五、堆:

当Java程序创立一个类的实例或许数组时,都在堆中为新的方针分配内存。虚拟机中只需一个堆,一切的线程都同享他。
   1、废物搜集(Garbage Collection)
   废物搜集是开释没有被引证的方针的首要方法。它也或许会为了削减堆的碎片,而移动方针。在Java虚拟机的标准中没有严厉界说废物搜集,仅仅界说一个Java虚拟机的完结有必要通过某种方法办理自己的堆。概况拜见第九章“Garbage Collection”。
   2、方针存储结构(Object Representation)
   Java虚拟机的标准中没有界说方针怎样在堆中存储。每一个方针首要存储的是他的类和父类中界说的方针变量。关于给定的方针的引证,虚拟机有必要嫩耨很快的 定位到这个方针的数据。另为,有必要供给一种通过方针的引证方法方针数据的方法,比方方法区中的方针的引证,所以一个方针保存的数据中往往含有一个某种方法 指向方法区的指针。
   一个或许的堆的规划是将堆分为两个部分:引证池和方针池。一个方针的引证便是指向引证池的本地指针。每一个引证池中的条目都包含两个部分:指向方针池中对 象数据的指针和方法区中方针类数据的指针。这种规划能够便利Java虚拟机堆碎片的收拾。当虚拟机在方针池中移动一个方针的时分,只需求修正对应引证池中 的指针地址。可是每次拜访方针的数据都需求处理两次指针。下图演示了这种堆的规划。在第九章的“废物搜集”中的HeapOfFish Applet演示了这种规划。 
   另一种堆的规划是:一个方针的引证便是一个指向一堆数据和指向相应方针的偏移指针。这种规划便利了方针的拜访,可是方针的移动要变的反常杂乱。下图演示了这种规划 
   当程序企图将一个方针转化为另一品种型时,虚拟机需求判别这种转化是否是这个方针的类型,或许是他的父类型。当程序适用instanceof句子的时分也 会做相似的作业。当程序调用一个方针的方法时,虚拟机需求进行动态绑定,他有必要判别调用哪一个类型的方法。这也需求做上面的判别。
   不管虚拟机完结者运用哪一种规划,他都或许为每一个方针保存一个相似方法列表的信息。由于他能够进步方针方法调用的速度,对进步虚拟机的功用十分重要,但 是虚拟机的标准中比没有要求有必要完结相似的数据结构。下图描绘了这种结构。图中显现了一个方针引证相相关的一切的数据结构,包含:
     1)、一个指向类型数据的指针
     2)、一个方针的方法列表。方法列表是一个指向一切或许被调用方针方法的指针数组。方法数据包含三个部分:操作码仓库的巨细和方法仓库的本地变量区;方法的字节码;反常列表。
     每一个Java虚拟机中的方针有必要相关一个用于同步多线程的lock(mutex)。同一时间,只能有一个方针具有这个方针的锁。当一个具有这个这个方针 的锁,他就能够屡次恳求这个锁,可是也有必要开释相应次数的锁才干真实开释这个方针锁。许多方针在整个生命周期中都不会被锁,所以这个信息只需在需求时才需 要增加。许多Java虚拟机的完结都没有在方针的数据中包含“确定数据”,仅仅在需求时才生成相应的数据。除了完结方针的确定,每一个方针还逻辑相关到一 个“wait set”的完结。确定帮组线程独立处理同享的数据,不需求阻碍其他的线程。“wait set”帮组线程协作完结同一个方针。“wait set”往往通过Object类的wait()和notify()方法来完结。 
   废物搜集也需求堆中的方针是否被相关的信息。Java虚拟机标准中指出废物搜集一个运转一个方针的finalizer方法一次,可是容许 finalizer方法从头引证这个方针,当这个方针再次不被引证时,就不需求再次调用finalize方法。所以虚拟机也需求保存finalize方法 是否运转过的信息。更多信息拜见第九章的“废物搜集”
   3、数组的保存(Array Representation)
在Java 中,数组是一种彻底意义上的方针,他和方针相同保存在堆中、有一个指向Class类实例的引证。一切同一维度和类型的数组具有相同的Class,数组的长 度不做考虑。对应Class的姓名表明为维度和类型。比方一个整型数据的Class为“[I”,字节型三维数组Class名为“[[[B”,两维方针数据 Class名为“[[Ljava.lang.Object”。
   数组有必要在堆中保存数组的长度,数组的数据和一些方针数组类型数据的引证。通过一个数组引证的,虚拟机应该能够获得一个数组的长度,通过索引能够拜访特定 的数据,能够调用Object界说的方法。Object是一切数据类的直接父类。更多信息拜见第六章“类文件”。

六、根本结构:

从Java渠道的逻辑结构上来看,咱们能够从下图来了解JVM:

java中JVM的原理

从上图能明晰看到Java渠道包含的各个逻辑模块,也能了解到JDK与JRE的差异。

JVM本身的物理结构

java中JVM的原理

此图看出jvm内存结构

JVM内存结构首要包含两个子体系和两个组件。两个子体系分别是Classloader子体系和Executionengine(履行引擎)子体系;两个组件分别是Runtimedataarea(运转时数据区域)组件和Nativeinterface(本地接口)组件。

Classloader子体系的效果:

依据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtimedataarea中的methodarea(方法区域)。Java程序员能够extendsjava.lang.ClassLoader类来写自己的Classloader。

Executionengine子体系的效果:

履行classes中的指令。任何JVMspecification完结(JDK)的中心都是Executionengine,不同的JDK例如Sun的JDK和IBM的JDK好坏首要就取决于他们各自完结的Executionengine的好坏。

Nativeinterface组件:

与nativelibraries交互,是其它编程言语交互的接口。当调用native方法的时分,就进入了一个全新的并且不再受虚拟机约束的国际,所以也很简单呈现JVM无法操控的nativeheapOutOfMemory。

RuntimeDataArea组件:

这便是咱们常说的JVM的内存了。它首要分为五个部分——

1、Heap(堆):一个Java虚拟实例中只存在一个堆空间

2、MethodArea(方法区域):被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它运用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。

3、JavaStack(java的栈):虚拟机只会直接对Javastack履行两种操作:以帧为单位的压栈或出栈

4、ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器,也是该线程发动时创立的。PC寄存器的内容总是指向下一条将被履行指令的饿地址,这儿的地址能够是一个本地指针,也能够是在方法区中相对应于该方法开始指令的偏移量。

5、Nativemethodstack(本地方法栈):保存native方法进入区域的地址

 

关于JVM的学习,在我看来这么几个部分最重要:

  • Java代码编译和履行的整个进程
  • JVM内存办理及废物收回机制

 

Java代码编译和履行的整个进程

Java代码编译是由Java源码编译器来完结,流程图如下所示:

java中JVM的原理

 

Java字节码的履行是由JVM履行引擎来完结,流程图如下所示:

java中JVM的原理

 

Java代码编译和履行的整个进程包含了以下三个重要的机制:

  • Java源码编译机制
  • 类加载机制
  • 类履行机制

Java源码编译机制

Java 源码编译由以下三个进程组成:(javac –verbose 输出有关编译器正在履行的操作的音讯)

  • 剖析和输入到符号表
  • 注解处理
  • 语义剖析和生成class文件

java中JVM的原理

最终生成的class文件由以下部分组成:

  • 结构信息。包含class文件格局版本号及各部分的数量与巨细的信息
  • 元数据。对应于Java源码中声明与常量的信息。包含类/承继的超类/完结的接口的声明信息、域与方法声明信息和常量池
  • 方法信息。对应Java源码中句子和表达式对应的信息。包含字节码、反常处理器表、求值栈与局部变量区大孝求值栈的类型记载、调试符号信息

类加载机制

JVM的类加载是通过ClassLoader及其子类来完结的,类的层次联络和加载次序能够由下图来描绘:

java中JVM的原理

1)Bootstrap ClassLoader /发动类加载器

 

$JAVA_HOME中jre/lib/rt.jar里一切的class,由C++完结,不是ClassLoader子类

 

2)Extension ClassLoader/扩展类加载器

 

担任加载java渠道中扩展功用的一些jar包,包含$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

 

3)App ClassLoader/ 体系类加载器

 

担任记载classpath中指定的jar包及目录中class

 

4)Custom ClassLoader/用户自界说类加载器(java.lang.ClassLoader的子类)

 

归于运用程序依据本身需求自界说的ClassLoader,如tomcat、jboss都会依据j2ee标准自行完结ClassLoader

 

加载进程中会先查看类是否被已加载,查看次序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层查看,只需某个classloader已加载就视为已加载此类,确保此类只一切ClassLoader加载一次。而加载的次序是自顶向下,也便是由上层来逐层测验加载此类。

 

 

类加载双亲派遣机制介绍和剖析

在这儿,需求侧重阐明的是,JVM在加载类时默许选用的是双亲派遣机制。浅显的讲,便是某个特定的类加载器在接到加载类的恳求时,首先将加载使命托付给父类加载器,顺次递归,假如父类加载器能够完结类加载使命,就成功回来;只需父类加载器无法完结此加载使命时,才自己去加载。

 

类履行机制

JVM是根据栈的体系结构来履行class字节码的。线程创立后,都会发作程序计数器(PC)和栈(Stack),程序计数器寄存下一条要履行的指令在方法内的偏移量,栈中寄存一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于寄存方法中的局部变量和参数,操作数栈中用于寄存方法履行进程中发作的中心成果。

内存办理和废物收回

JVM内存组成结构

JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:

java中JVM的原理

 

 

JVM内存收回

 

Sun的JVMGenerationalCollecting(废物收回)原理是这样的:把方针分为年青代(Young)、年迈代(Tenured)、耐久代(Perm),对不同生命周期的方针运用不同的算法。(根据对方针生命周期剖析)

java中JVM的原理

1.Young(年青代)

年青代分三个区。一个Eden区,两个Survivor区。大部分方针在Eden区中生成。当Eden区满时,还存活的方针将被仿制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活方针将被仿制到别的一个Survivor区,当这个Survivor去也满了的时分,从第一个Survivor区仿制过来的并且此刻还存活的方针,将被仿制年迈区(Tenured。需求留意,Survivor的两个区是对称的,没先后联络,所以同一个区中或许一起存在从Eden仿制过来方针,和早年一个Survivor仿制过来的方针,而仿制到年迈区的只需从第一个Survivor去过来的方针。并且,Survivor区总有一个是空的。

2.Tenured(年迈代)

年迈代寄存从年青代存活的方针。一般来说年迈代寄存的都是生命期较长的方针。

3.Perm(耐久代)

用于寄存静态文件,现在Java类、方法等。耐久代对废物收回没有明显影响,可是有些运用或许动态生成或许调用一些class,例如Hibernate等,在这种时分需求设置一个比较大的耐久代空间来寄存这些运转进程中新增的类。耐久代巨细通过-XX:MaxPermSize=进行设置。

举个比如:当在程序中生成方针时,正常方针会在年青代中分配空间,假如是过大的方针也或许会直接在年迈代生成(据观测在运转某程序时分每次会生成一个十兆的空间用收发音讯,这部分内存就会直接在年迈代分配)。年青代在空间被分配完的时分就会主张内存收回,大部分内存会被收回,一部分幸存的内存会被复制至Survivor的from区,通过屡次收回今后假如from区内存也分配结束,就会也发作内存收回然后将剩下的方针复制至to区。比及to区也满的时分,就会再次发作内存收回然后把幸存的方针复制至年迈区。

一般咱们说的JVM内存收回总是在指堆内存收回,的确只需堆中的内容是动态恳求分配的,所以以上方针的年青代和年迈代都是指的JVM的Heap空间,而耐久代则是之前说到的MethodArea,不归于Heap。

关于JVM内存办理的一些主张

1、手动将生成的无用方针,中心方针置为null,加速内存收回。

2、方针池技能假如生成的方针是可重用的方针,仅仅其间的特点不一起,能够考虑选用方针池来较少方针的生成。假如有闲暇的方针就从方针池中取出运用,没有再生成新的方针,大大进步了方针的复用率。

3、JVM调优通过装备JVM的参数来进步废物收回的速度,假如在没有呈现内存走漏且上面两种方法都不能确保JVM内存收回时,能够考虑选用JVM调优的方法来处理,不过必定要通过实体机的长时间测验,由于不同的参数或许引起不同的效果。如-Xnoclassgc参数等。

 
 

本文地址:http://www.anyuan2002.com/bcdm/100112.html
Tags: 原理 Java JVM
修改:vwin网
  • 上一篇:C言语正确运用extern关键字
  • 下一篇:没有了
  • 推行内容
    引荐阅览
    抢手引荐
    引荐文章
    关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部