![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
成为更好的qyk嘻嘻
一个努力的人
展开
-
给对象划分堆空间引入gc 总结
通常,给对象分配内存有两种方式:一种是指针碰撞,另一种是空闲列表。 指针碰撞 指针碰撞(Bump the Pointer),默认采用的是指针碰撞的方式。如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。 空闲列表 如果Java堆中的内存不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,原创 2022-03-04 13:45:50 · 230 阅读 · 0 评论 -
对象的创建与类的加载
对象的创建: 1.检查类是否类加载,如果没加载则进行类的加载 2.在堆中划分对象的空间 3.为对象的各个字段赋默认值 4.为对象设置对象头 5.执行init方法对对象各个字段赋值 类的加载: 1.加载:将class文件加载到方法区中,并在堆创建对应Class类对象 2.链接: i.检查:验证class文件是否符合规范 ii.准备:为静态变量分配空间,设置默认值,如果是静态常量则直接赋值 iii.解析:常量池的符号引用转为直接引用 3.初始化:对静态变量赋值和执行静态代码块。(类没加载先加载,父类没初始化先初原创 2022-03-03 12:47:21 · 325 阅读 · 0 评论 -
三种常量池
1.字符串常量池存字符串对象 2.class常量池有字面量和符号引用,放在class文件里 3.通过类加载,class常量池变成运行时常量池,放在方法区中,运行时常量池中符号引用变为直接引用原创 2022-03-03 12:46:23 · 60 阅读 · 0 评论