导航:首页 > 编程语言 > 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加载类的过程相关的资料

热点内容
压保单事故处理中怎样解压车辆 浏览:563
switch字符串java 浏览:969
2021年毕业二本程序员月薪 浏览:892
android饼图控件 浏览:138
下载完课件怎么解压 浏览:300
荆州源码名片 浏览:122
phpdemo视频 浏览:205
程序员转行做大数据 浏览:547
真我t1如何添加加密nfc 浏览:605
股市复盘系统源码 浏览:524
我的世界如何不要钻石创造服务器 浏览:533
虚拟机里面的文件重命名mv命令 浏览:20
安卓什么电话系统最好 浏览:581
进入云服务器输入什么密码 浏览:328
java微信下载手机版 浏览:73
php代码分析工具 浏览:673
泰坦陨落2xbox如何换服务器 浏览:755
安卓手机如何用数据线连接投影 浏览:380
java类的实例变量的区别 浏览:714
千年源码端多少钱 浏览:252