• JVM


     扫盲:

    1、jvm定义


    JVM就是java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。JVM有自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。
    2、jvm作用


    JVM是java字节码执行的引擎,还能优化java字节码,使之转化成效率更高的机器指令。
    JVM中类的装载是由类加载器和它的子类来实现的,类加载是java运行时一个重要的系统组件,负责在运行时查找和装入类文件的类。
    不同的平台对应着不同的JVM,在执行字节码(class文件)时,JVM负责将每一条要执行的字节码送给解释器,解释器再将其翻译成特定平台换将的机器指令并执行,这样就实现了跨平台运行


    3、JVM工作原理


    JVM在整个JDK中处于最底层,负责与操作系统的交互。操作系统装入jvm是通过JDK中的java.exe来实现的,具体步骤如下:
    a、创建JVM装载环境和配置;
    b、装载jvm.dll;
    c、初始化jvm.dll;
    d、调用JNIEnv实例装载并处理class类;
    e、运行java程序

    JVM模型图:

    1:Class Loader 类加载器:

    2:Execution Engine 执行引擎负责解释命令,提交操作系统执行:

    3:Native Interface 本机接口

    4:Runtime  data area 运行数据区

     本地库接口是JAVA刚开发出来时,预留给和其他语言对接的接口例如C:

     方法区:所有定义的方法的信息都保存在该区域,次区域是共享区间。静态变量 +常量+运行时常量池存在方法区中+实例变量存在内存中

    PC Register: 程序计数器:每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令码),由执行引擎读取下一条指令,是一个                         非常小的内存空间,几乎可以忽略不记:(主要作用就是保证main方法中的代码的执行的顺序)

    JVM的调优:

                     根据淘宝周志民,所说,jvm的调优(共享区域)90%是调堆,10%是方法区:

     

               ----------------------            栈管运行,堆管存储            -------------------

     一:java 堆:

        >  存放对象的实例

       >  垃圾收集器管理的主要区域

       >  新生代(Eden区,Servior区(From space或(Survivor1)区和To Space区(Survivor2))),年老带

              Eden区和Servior区的内存比为8:1。 当扩展内存大于可用内存,抛OOM

      >   outofMemory

       > -xmx   设置初始分配大小为,默认为物理内存的1/64

            -xms  设置初始分配大小为,默认为物理内存的1/4

        >永久带:用于存放JDK自身所携带的 Class,Interface 的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是几乎不会被垃圾回收器回收掉的

    Jdk1.6及之前: 常量池分配在永久代

    Jdk1.7: 有,但已经逐步“去永久代”

    Jdk1.8及之后: 无

    --------------------------------------------------------------------------------------------------------------------------------------

    Minor GC ,Full GC 触发条件
    Minor GC触发条件:当Eden区满时,触发Minor GC。

    Full GC触发条件:

    (1)调用System.gc时,系统建议执行Full GC,但是不必然执行

    (2)老年代空间不足

    (3)方法去空间不足

    (4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存

    (5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

    若年老区执行了Full GC之后发现依然无法进行对象的保存,就会产生OOM异常“OutOfMemoryError“

     

  • 相关阅读:
    基础数据结构-线性表-顺序表的合并操作
    基础数据结构-线性表-顺序表
    后向引用(转)
    PHP正则表达式的快速学习方法
    c语言结构体中的冒号的用法
    C语言中可变参数的用法
    C语言snprintf函数
    C语言宏与单井号(#)和双井号(##)
    gcc 的visibility 使用
    __attribute__机制介绍 (转)
  • 原文地址:https://www.cnblogs.com/leeego-123/p/11099883.html
Copyright © 2020-2023  润新知