摘要: 类装载的执行过程 加载:查找和导入class文件。 验证保证加载类的准确性。 准备:为类变量分配内存并设置类变量初始值。 解析:把类中的符号引用转换为直接引用。 初始化:对类的静态变量,静态代码块执行初始化操作。 使用:JVM 开始从入口方法开始执行用户的程序代码。 卸载:当用户程序代码执行完毕后, 阅读全文
posted @ 2024-05-29 17:01 worshipone 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 什么是类加载器 JVM只会字节码文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。 类加载器有哪些 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/ib目录下的库。 扩展类加载器(ExtClassLoader):主要加载J 阅读全文
posted @ 2024-05-29 17:00 worshipone 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 直接内存 直接内存并不属于JVM中的内存结构,不由JVM进行管理。 是虚拟机的系统内存,常见于NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不受JVM内存回收管理。 阅读全文
posted @ 2024-05-29 16:14 worshipone 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 解释一下方法区 方法区(Method Area)是各个线程共享的内存区域,主要存储类的信息、运行时常量池。 虚拟机启动的时候创建,关闭虚拟机时释放。 如果方法区域中的内存无法满足分配请求,则会抛出OutOfMemoryError:Metaspace。 介绍一下运行时常量池 常量池可以看作是一张表,虚 阅读全文
posted @ 2024-05-29 16:00 worshipone 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 什么是虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。 垃圾回收是否涉及栈内存 垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。 栈内存分配越大越好吗 未必,默认 阅读全文
posted @ 2024-05-29 15:43 worshipone 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 作用 线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。 组成 年轻代+老年代。 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区。 老年代主要保存生命周期长的对象,一般是一些老的对象。 Jdk1.7和1.8的区别 1.7中有有一 阅读全文
posted @ 2024-05-29 14:34 worshipone 阅读(6) 评论(0) 推荐(0) 编辑
摘要: hashMap寻址算法 计算对象的hashCode()。 再进行调用 hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。 最后(capacity-1)&hash 得到索引。 为何HashMap的数组长度一定是2的次幂 计算索引时效率更高:如果是2的n次幂可以使 阅读全文
posted @ 2024-05-16 23:33 worshipone 阅读(35) 评论(0) 推荐(0) 编辑
摘要: HashMap扩容原理 在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。 每次扩容的时候,都是扩容之前容量的2倍。 扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。 没有hash 阅读全文
posted @ 2024-05-16 22:56 worshipone 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。 根据键值key计算hash值得到数组索引。 判断table[i]==null,条件成立,直接新建节点添加。 如果table[i]==null,不成立 判断table[i]的首个元素是否和key一样,如果相同直 阅读全文
posted @ 2024-05-16 22:09 worshipone 阅读(35) 评论(0) 推荐(0) 编辑
摘要: HashMap的实现原理 底层使用hash表数据结构,即数组+(链表|红黑树)。 添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。 获取数据通过key的hash计算数组下标获取元素。 HashMap的JDK1.7和JDK1.8有什么区别 JDK1.8之前 阅读全文
posted @ 2024-05-16 21:09 worshipone 阅读(12) 评论(0) 推荐(0) 编辑
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示