导航:首页 > 编程语言 > java加载类的过程

java加载类的过程

发布时间:2025-04-07 10:13:36

‘壹’ 13道常见的 JVM面试题

  1. 类加载过程

    • 类加载器按全限定名称加载class文件。
    • 加载:读取class文件到内存中。
    • 验证:检查class文件的魔数、版本号等。
    • 准备:为静态变量分配内存并设置初始值。
    • 解析:将符号引用转化为直接引用。
    • 初始化:执行静态变量初始化和静态代码块。
  2. java内存模型

    • 定义主内存工作内存
    • 主内存存储全局变量。
    • 工作内存存放线程变量。
  3. 内存区域

    • 方法区:存储类信息。
    • :对象存储区域。
    • 虚拟机栈:存储线程局部变量。
    • 本地方法栈:调用native方法时使用。
    • 程序计数器:记录当前线程执行的位置。
    • 运行时常量池:存储编译时的常量信息。
  4. 堆与栈的区别

    • :用于对象存储,线程共享。
    • :存储方法帧和局部变量,线程独享。
    • 对象在堆上分配,栈上保存对象的引用。
  5. GC流程

    • 垃圾收集器自动管理内存。
    • 包括新生代和老年代的分配、对象移动和垃圾回收。
  6. 双亲委派模型

    • 类加载器遵循从父加载器到子加载器的策略。
    • 防止内存中出现重复类。
    • 打破双亲委派模型需重写loadClass和findClass方法。
  7. JVM参数

    • 包括内存初始大小、最大内存。
    • 新生代大小设置。
    • 栈大小。
    • 垃圾回收器和收集参数设置。
  8. 引用类型

    • 强引用:常驻内存。
    • 软引用:用于缓存,内存不足时会被回收。
    • 弱引用:对象存活时存在,垃圾回收时会被回收。
    • 虚引用:用于跟踪对象被回收的时间。
  9. 垃圾回收算法

    • 标记清除:标记无用对象并清除。
    • 复制:将存活对象复制到另一块内存区域。
    • 标记整理:标记无用对象并整理存活对象。
    • 分代收集:针对不同代使用不同的算法。
  10. 垃圾回收器

    • 多种回收器如串行并行并发等。
    • 针对不同内存区域和对象特性进行管理。
  11. 内存回收

    • 程序计数器和栈内存随线程结束而回收。
    • 判断对象存活通过引用计数可达性分析
  12. GC监控

    • 使用jconsolejvisualvm等工具监控内存使用情况。
  13. 内存错误处理

    • OutOfMemoryError:调整堆大小、permSize等参数。
    • StackOverflowError:避免递归过深,改用循环或增大栈大小。

‘贰’ java中类加载器是怎么工作的

JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)
链接又分为三个步骤,验证、准备、解析
1) 装载:查找并加载类的二进制数据;
2)链接:
验证:确保被加载类的正确性;
准备:为类的静态变量分配内存,并将其初始化为默认值;
解析:把类中的符号引用转换为直接引用;
3)初始化:为类的静态变量赋予正确的初始值;
那为什么我要有验证这一步骤呢?首先如果由编译器生成的class文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧。
准备阶段和初始化阶段看似有点牟盾,其实是不牟盾的,如果类中有语句:private static int a = 10,它的执行过程是这样的,首先字节码文件被加载到内存后,先进行链接的验证这一步骤,验证通过后准备阶段,给a分配内存,因为变量a是static的,所以此时a等于int类型的默认初始值0,即a=0,然后到解析(后面在说),到初始化这一步骤时,才把a的真正的值10赋给a,此时

‘叁’ java类的加载过程是怎么样的

类加载到jvm需要经历如下几个过程:

一.加载
通过类的全限定名转换为二进制字节流,在jvm堆中生成代表这个Class的对象,作为方法区域的方法入口.

二.连接
1.验证:验证class的字节流是否对jvm虚拟机造成伤害,是否符合jvm的规范,这里包含几个验证.
2.准备:为类的static变量赋初始值,其中不包含类其它实例成员的初始化.
3.解析:将常量池内的符号引用替换成直接引用
三.初始化
这里是static{}块,构造函数,代码块{}的执行过程.
四.使用
对象的属性,方法等调用操作.
五.销毁
jvm通过确定对象没有引用后进行gc操作.

阅读全文

与java加载类的过程相关的资料

热点内容
注册服务器地址指什么 浏览:431
文本命令行 浏览:95
扑克牌睡眠解压 浏览:190
rc4算法流程图 浏览:157
胡萝卜解压方法 浏览:35
扫描pdf格式软件 浏览:876
程序员在银行开账户 浏览:516
android数据库下载 浏览:749
中午服务器崩溃怎么办 浏览:425
产品经理和程序员待遇 浏览:442
解忧程序员免费阅读 浏览:109
录像免压缩 浏览:508
总结所学过的简便算法 浏览:362
南昌哪些地方需要程序员 浏览:761
三台服务器配置IP地址 浏览:175
如何用命令方块连续对话 浏览:280
win7linux共享文件夹 浏览:304
命令符打开本地服务 浏览:601
android应用程序源码 浏览:705
安卓开发工程师简历怎么写 浏览:63