JVM
文章平均质量分 71
java虚拟机
wqc8994
没有
展开
-
对象的创建和分配
1. 对象创建过程创建一个对象,首先是把class文件加载到内存,具体包括三步:具体请看class文件加载过程https://blog.csdn.net/wqc8994/article/details/107928769。然后需要给对象申请内存,接下来成员变量赋默认值,最后调用构造方法。调用构造方法时先调用父类构造方法,然后成员变量赋初始值,接着在执行构造方法语句。2. 对象的内存布局对象的内存布局分为两种,一种为普通对象,一种为数组对象。普通对象 数组对象 对象头 对象头原创 2020-10-27 23:17:08 · 223 阅读 · 0 评论 -
JMM的问与答
Q:JAVA内存模型规定是什么?A:所有的变量(线程共享变量:静态字段,实力字段,构成数组对象的元素等,不包过局部变量和方法变量)都存储在主内存(JVM内存的一部分),每条线程有自己的工作内存。线程对变量的操作都必须先将主内存的变量copy到自己的工作内存,在进行操作,而不能直接对主内存的变量进行操作。Q:为什么会出现指令重排序?A:由于线程从主内存读取变量的操作相对于自己的运行速度是非常慢的,所以在不影响结果的情况下CPU在等待读取变量时会执行后面的指令,此时会要求后面的指令不会用到前面变量,原创 2020-08-30 23:37:12 · 85 阅读 · 0 评论 -
如何自定义ClassLoader
在自定义ClassLoader之前要对ClassLoader的源码进行一些了解。当ClassLoader进行加载一个类时,会调用ClassLoader的loadClass方法。代码如下: /** * Loads the class with the specified <a href="#name">binary name</a>. * This method searches for classes in the same manne...原创 2020-08-21 00:22:29 · 2390 阅读 · 0 评论 -
Class文件加载初始化过程
class文件加入到内存经过loading、linking和initializing三步,其中linking的过程又分为verification、preparation、resolution三步。整个过程如下图: loading是将class文件读取到内存,这一步是通过ClassLoader来完成的。ClassLoader分为四个层次:第一个层次是Bootstrap类加载器,用来加载jdk lib里最核心的内容,比如说rt.jar,charset.jar等核心类,由C++实...原创 2020-08-18 23:26:11 · 276 阅读 · 0 评论 -
Class文件格式
Class文件是一组以8位字节为基础的二进制流。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种结构只用两种数据类型:无符号数和表。无符号数以u1、u2、u4、u8分别来代表1、2、4、8个字节的无符号数。表是由多个无符号数或者其他表为数据项组成的复合数据类型。习惯以“_info”结尾。class文件格式如下:类型 名称 数量 说明 ...原创 2020-08-10 22:23:14 · 852 阅读 · 0 评论