对象创建 、类加载、双亲委派模型

对象的创建过程:

  1. 当虚拟机遇到一个new的指令时,首先根据这个指令所带的类参数 去方法区的常量池寻找类的符号引用,能找到说明存在这个类。
  2. 验证符号引用所代表的类是否完成类加载
  3. 为新生对象分配内存(所需内存大小来类加载时完成确定)

分配内存的两种方式

  1. 指针碰撞:将临界点指针移动一个对象大小的距离即可完成分配
  2. 空闲列表:虚拟机维护着一个记录空闲内存的地址表,分配时遍历该表,直到找到第一个比对象所需内存大的内存区域。即可完成分配。并更新该表。

当Java堆规整的情况下,使用指针碰撞方式分配内存
当Java堆不规整时,使用空闲列表方式
Java堆是否规整取决于所采用的垃圾收集器是否具有压缩整理的功能

分配内存时的线程安全问题:
问题描述:当多个线程同时请求分配内存时,有可能找到同一个地址块。当线程A完成分配后,还未更新 空闲列表 时,线程B请求分配。

问题解决:
方案一:同步整个空闲列表,使用CAS锁
方案二:本地线程分配缓冲。在Java堆中为每个线程开辟一小块内存区域,每个线程先在各自线程内部分配区域,互不干扰。当本地线程分配缓冲耗尽时,采用方案一。

类加载过程:

加载 --> 验证 --> 准备 --> 解析 --> 初始化 --> 使用 --> 卸载 

其中 验证 准备 解析的都属于链接阶段

加载:

  1. 根据类的全限定名获取定义该类的二进制字节流文件 (一般是class文件,其他类型文件也可以)
  2. 将二进制字节流按照虚拟机规范格式存储在方法区中 ,实际上时将静态的存储结构转换为方法区的运行时数据结构
  3. 在方法区生成一个Java.long.class对象。作为方法区中该类的各种数据的访问入口

验证:
确保字节流中包含的信息符合虚拟机规范,并不会影响到虚拟机安全

  1. 文件格式验证:
  2. 元数据验证:
  3. 字节码验证:
  4. 符号引用验证:

准备:
为类变量(static静态变量)分配内存并初始化值的过程。
解析:
虚拟机将常量池中符号引用改为直接引用的过程。
解析主要针对:类或接口、字段、类方法、接口方法、方法类型、方法句柄、调用点限定符 这七类符号引用。

初始化:
按照程序员计划初始化变量和其他资源的过程
理解:执行静态代码块、代码块、构造方法的过程。

类加载器:

作用:把由javac编译成的class文件,装进虚拟机。
分类:

  1. 启动类加载器(bootstrap classloader):加载<JAVA_HOME>/lib 目录下类库中的Java类
  2. 扩展类加载器(extension classloader):加载<JAVA_HOME>/lib/ext 目录中的 扩展类
  3. 应用程序类加载器(application classloader):当前工作目录/bin 中的用户类

双亲委派模型

  1. 当一个类加载器接收到类加载任务时,先查缓存里有没有,如果没有,将任务委托给它的父加载器去执行。
  2. 父加载器也做同样的事情,一层一层往上委托,直到最顶层的启动类加载器为止。
  3. 如果启动类加载器没有找到所需加载的类,便将此加载任务退回给下一级类加载器去执行,而下一级的类加载器也做同样的事情。
  4. 如果最底层类加载器仍然没有找到所需要的class文件,则抛出异常。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值