zoukankan      html  css  js  c++  java
  • java类的加载时机

    类加载

    它直接表现出来的代码应该是 ClassLoader.getSystemClassLoader().loadClass("com.my.test.AbcClass")。所以具 体完成类的加载工作的,是常被提到的类加载器ClassLoader,它就是专门干这件事的。“类的加载”具体而言就是指将类.class文件中的二进制 数据读入到内存中将其放在方法区内,然后在堆区创建一个java.lang.Class对象,所以说“加载”的最终产出是堆中的一个Class对象,它一 产生,加载这件事就干完了。这里又引出一个东东——方法

    上图截自毕玄大师的ppt,描绘了jvm内存的布局,书中都会说到方法区中存放的是类信息、类的field信息、方法信息都在其中;另外以前听到过一种说法:“堆(新生代+老生代)是留给java开发人员使用的,非堆(持久带即方法区)是留给jvm自己使用的”。再回过头看上面的描述——“类的加载”就是指将类的.class文件中的二进制数据读入到内存中将其放在方法区内,然后在堆区创建一个 java.lang.Class对象,换句换说“类的加载”就是为了给程序员一个可以获得类相关定义信息的窗口,这个窗口就是Class对象,类加载的过 程中将方法区的结构化类定义信息映射到堆里的一个实体Class对象中,进而程序员可以通过这道桥梁最终得到该类的一个实例,比如调用Class的 newInstance()。

    类的加载时机

    目前我理解类的加载时机不受程序员控制,由jvm自己控制,或许它需要考虑一些优化策略,比如对于一些jvm认为未来很可能需要用到的类,jvm可 以在空闲时提前加载,即提前准备好堆中的Class对象。类加载最迟的时机应该很明确,等同于类的初始化时机,下面说初始化时会说到。

  • 相关阅读:
    ftoa浮法成字符串
    iOS UIWebView键盘操控
    开始Unity3D参观考察
    中国目前拥有的物种和人造卫星的作用
    robin 今日南
    编写自己的单点登录(SSO)服务
    poj 2385 Apple Catching dp
    OSI七层模型具体解释
    Android学习路径(四)文件项目学习的名单,android显示单元经常使用的
    单元测试概述
  • 原文地址:https://www.cnblogs.com/sky7034/p/2359462.html
Copyright © 2011-2022 走看看