美文网首页我爱编程
something about jvm

something about jvm

作者: lazysong | 来源:发表于2018-02-26 12:18 被阅读0次

    java 文件被编译器编译成字节码文件(.class)
    字节码就是十六进制的流文件
    为便于开发者理解,通常 IDE 会根据字节码的规则将字节码文件翻译成易读的 java 代码。
    字节码文件会被交给 java 虚拟机来执行。
    字节码并非只能通过 .java 文件编译而来,只要符合字节码的规范,我们甚至可以自己手写字节码。
    参考资料

    双亲委派机制
    双亲委派机制是指 jvm 中对于类加载的一种推荐做法。
    jvm 中并没有强制规定类加载的机制,而是将类加载的过程放在了 jvm 外面。一般的类加载器我们可以分为两大类,一类是用 C++ 编写,集成在 jvm 内部的 Bootstrap ClassLoader,另一类是用 java 语言编写的加载器,其中又可以分为拓展类加载器(Extension ClassLoader)、应用程序类加载器(Application ClassLoader)和自定义类加载器。
    双亲委派机制是指当一个类加载器在加载类的时候,会先请求自己的父加载器来加载。这里的父子关系不是通过继承来实现的,而是通过组合的方式来实现的,如下:

    // java.lang.ClassLoader 类中
    protected Class<?> loadClass(String name, boolean resolve)
           throws ClassNotFoundException
       {
           synchronized (getClassLoadingLock(name)) {
               // First, check if the class has already been loaded
               Class<?> c = findLoadedClass(name);
               if (c == null) {
                   long t0 = System.nanoTime();
                   try {
                       if (parent != null) {
                           c = parent.loadClass(name, false);
                       } else {
                           c = findBootstrapClassOrNull(name);
                       }
                   } catch (ClassNotFoundException e) {
                       // ClassNotFoundException thrown if class not found
                       // from the non-null parent class loader
                   }
    
                   if (c == null) {
                       // If still not found, then invoke findClass in order
                       // to find the class.
                       long t1 = System.nanoTime();
                       c = findClass(name);
    
                       // this is the defining class loader; record the stats
                       sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                       sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                       sun.misc.PerfCounter.getFindClasses().increment();
                   }
               }
               if (resolve) {
                   resolveClass(c);
               }
               return c;
           }
       }
    

    相关文章

      网友评论

        本文标题:something about jvm

        本文链接:https://www.haomeiwen.com/subject/ulmexftx.html