类加载

它直接表现出来的代码应该是 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对象。类加载最迟的时机应该很明确,等同于类的初始化时机,下面说初始化时会说到。

java类 连接时机_java类的加载时机相关推荐

  1. java的连接 初始化_java类从加载、连接到初始化过程详解

    Java代码在编译后会转化成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化成汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 类加载 ...

  2. java类加载器顺序_java中类的加载顺序介绍(ClassLoader)

    1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题.对于这个异常,它实质涉 ...

  3. java 动态读取文件_Java窗体动态加载磁盘文件的实现方法

    在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹.本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件:如果该文件是隐藏文件,就在 ...

  4. java 类加载生命周期_Java类的加载与生命周期

    一.概要: 类的生命周期从类的 加载.连接.初始化 开始,到类的 卸载结束: 二.几个阶段: 加载:查找并加载类的二进制数据.(把类的.class文件的二进制数据读入内存,存放在运行时数据区的方法区: ...

  5. java类的加载时机和过程

    首先,这是一个加载实例: 类什么时候被加载 其次,主要原理: http://blog.csdn.net/liang_70121385/article/details/52496028 内容如下: 1 ...

  6. java错误找不到或无法加载主类_java提示找不到或无法加载主类怎么办

    java提示找不到或无法加载主类的解决方法:1.打开高级系统设置,进入环境变量设置:2.新建JAVA_HOME变量,设置jdk安装路径:3.编辑PATH变量,添加bin目录的路径,点击[确定]即可. ...

  7. jvm类加载过程_JVM类生命周期概述:加载时机与加载过程

    作者:菜鸟小于 https://www.cnblogs.com/Young111/p/11359700.html 一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描 ...

  8. Java 错误: 找不到或无法加载主类,问题集合

      正确编译命令: javac Hello.java 正确运行命令: java Hello 错误1:H:\code>java Hello.java 错误: 找不到或无法加载主类 Hello.ja ...

  9. java错误 找不到或无法加载主类

    java:错误: 找不到或无法加载主类 1.确定JDK版本 ​ 因为随着时间的改变,JDK本身也伴随着更改和变化,在解决这个问题前,我们要确定一下jdk的版本,比较老的版本有老的版本的解决方法,比较新 ...

最新文章

  1. 如何学习修改linux系统固件,基于Linux的固件,如何实现更新的好方法?
  2. 使用扩展的 CodeIgniter 框架实现 RESTful 框架
  3. 【 MATLAB 】通过案例学会编写一个 matlab 函数(小猫掉进山洞问题)
  4. loadrunner通过使用libmysql.dll完成mysql的测试
  5. python实现中文图片文字识别--OCR about chinese text--tesseract
  6. 组件接口(API)设计指南-文件夹
  7. 1001 A+B Format (20分)——12行代码AC
  8. dpkg: error processing package sunloginclient (--install): dependency problems - leaving unconfigur
  9. php-fpm安装包_linux下安装php php-fpm(转载)
  10. Ubuntu16.04安装Mono4.2.1 C#开发环境
  11. Javascript:ES6模块化开发报错:Uncaught SyntaxError: Cannot use import statement outside a module
  12. 只想着一直调用一直爽, 那API凭证泄漏风险如何破?
  13. JAVA日常游玩-----用EnumMap优化代码。
  14. (附源码)计算机毕业设计Java远程健康数据管理系统
  15. 关于银行卡四要素返回数据解析问题
  16. 良田高拍仪接口文档对接
  17. 【资料】印度数学家拉马努金
  18. cmd批处理的/d/l/r/f
  19. [SFML]使用SFML复刻一个九宫幻卡小游戏(二)项目创建和SFML的配置
  20. ExtJs6入门-使用SenchaCmd命令创建第一个ExtJs6的HelloWorld项目

热门文章

  1. python连等号_Python比较2列表和2元组用等号
  2. 企业微信H5_身份验证,PC网站企业微信扫码授权登录
  3. docker jenkins
  4. Directory /opt/jfrog/artifactory/var has bad permissions for user id 1030
  5. flowable DMN规则引擎几种类型解释_04
  6. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(配置数据库监听_09)
  7. 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
  8. vue 全家桶 - 前端工程化
  9. JavaScript-概述
  10. cad查看_CAD与天正软件对齐命令实例讲解