![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
敲代码的卡普罗尼
这个作者很懒,什么都没留下…
展开
-
JAVA中对象的创建过程
第一步 虚拟机遇到一条new指令时,会先判断这个指令的参数是否能在常量池中找到这个类的符号引用,并且会判断这个类是否被加载。如果没有被加载的话,则执行类加载过程(可以参考上一篇类加载文章)。 第二步 为对象分配内存,主要分为两种:指针碰撞或者空闲链表。指针碰撞要求内存绝对规整,分配内存时只要把指针往空闲端挪动一段与要分配对象大小相等的距离就可以了。空闲链表不要求内存是否规整,它维护了一张列表,记录...原创 2019-11-03 16:59:53 · 148 阅读 · 0 评论 -
JVM中的类加载机制
JAVA类加载主要分为5个过程,分别是:加载 、验证 、 准备 、解析和初始化。 注意:对于静态字段,当调用时只有直接定义这个字段的类才会被初始化。见P212 (1)加载。加载环节主要分为3步,分别是: (a)根据类的权限定名来获取定义此类的二进制字节流 (b)将这个字节流代表的静态存储结构转化为方法区中的动态存储结构 (c)在内存中生成一个代表这个类的java.lang.Class对象,作为方法...原创 2019-11-03 16:17:26 · 96 阅读 · 0 评论 -
Java中init方法与clinit方法
Java在编译之后会在字节码文件中会生成方法,称之为实例构造器,该实例构造器会将语句块,变量初始化,调用父类的构造器等操作都会在方法中执行,执行的顺序(这里只讨论非静态变量和语句块)为: 父类变量初始化 —> 父类语句块 —> 父类构造函数 —> 子类变量初始化 —> 子类语句块 —> 子类构造函数 此处的变量和语句块指的是非静态变量和非静态语句块...原创 2019-11-03 15:45:15 · 196 阅读 · 0 评论