深入理解JVM虚拟机

Posted toov5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解JVM虚拟机相关的知识,希望对你有一定的参考价值。

  • JVM平台上还可以运行其他语言,运行的是Class字节码。只要能翻译成Class的语言就OK了。挺强大的。
  • JVM厂商很多
  • 垃圾收集器、收集算法
  • JVM检测工具

 

关于类的加载:

  •  Java代码中,类型(interface, class,enum等,有些是在运行时候生成的,比如动态代理)的加载、连接与初始化过程都是在程序运行期间完成的。不涉及到对象的概念。同时也是个Runtime阶段。
  •  提供了更大的灵活性,增加了更多的可能性。提供了一些扩展,灵活扩展。

    

Java虚拟机与程序的生命周期:

  在如下几种情况下,Java虚拟机将会结束生命周期:

  1. 执行了System.exit()方法
  2. 程序正常执行结束
  3. 程序执行过程遇到了异常或者错误异常终止了
  4. 操作系统出现错误导致Java虚拟机进行终止

 

类的加载、连接与初始化:

加载:查找并加载类的二进制数据

连接: 

  • 验证: 确保被加载类的正确性。Class有格式的。
  • 准备:为类的静态变量分配内存,并将其初始化为默认值  
  • 注:
    1.类的静态变量或类的静态方法,通常可以看做全局的,由类去直接调用。此时还是个类的概念,不存在对象。
    2.关于默认值问题:
    class Test
    public static int a = 1;

    中间过程: Test类加载到内存的过程中,会给a分配一个内存。然后将a初始化为默认值0(整型变量)

  • 解析: 把类中的符号引用转为直接引用。符号的引用也是间接的引用方式。

初始化: 为类的静态变量赋予正确的初始值

  • class Test
       public static int a = 1;
      
    此时的a才真正成为1了
    

      

类的使用与卸载

 使用: 类的方法变量使用等

 卸载: class字节码文件,加载到内存里面。形成了自己的数据结构,驻留在内存里面。可以销毁掉。卸载到了就不能进行new 对象了。

 

以上是关于深入理解JVM虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Java虚拟机:JVM高级特性与最佳实践的内容简介

JVM虚拟机---深入理解Class中-属性集合

深入理解jvm虚拟机一

深入理解jvm原理之逃逸分析

《深入理解JVM——虚拟机类加载机制》

《深入理解JVM——虚拟机类加载机制》