侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 92 篇文章
  • 累计创建 109 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

类加载分析--理论部分

Epoch
2021-09-12 / 0 评论 / 0 点赞 / 256 阅读 / 492 字 / 正在检测是否收录...

类加载分析–理论部分

1、Java内存分析

Java内存分为三个区:
				堆内存:存放new的对象和数组,垃圾回收主要在堆内存中
				栈内存:存放基本变量类型、引用类型变量(地址指向堆内存中的地址)
				方法区:包含了所有的class和static变量

image-20210912191304286

2、类加载的过程

类加载主要可以分为三步(如下图所示)

image-20210912192022966

加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法去的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象。

链接:将Java类的二进制代码合并到JVM的运行状态之中的过程。如下过程
		1.验证:确保加载的类信息符合JVM规范,没有安全方面的问题。
		2.准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。
		3.解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程

初始化:
		1.执行类构造器(<clinit>)方法的过程。类构造器(<clinit>)方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)
		2.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
		3.虚拟机会保证一个类的(<clinit>)方法在多线程环境中被正确加锁和同步。
0

评论区