jvm
乱炖之
这个作者很懒,什么都没留下…
展开
-
jvm栈中的栈帧
栈帧的概念结构局部变量表用于存放方法参数,方法内部定义的局部变量java程序被编译为class文件的时候,在方法的code属性的max_lacals数据项中确定了方法所需要分配的最大局部变量表的容量局部变量表的容量以变量槽(variable Slot)为最小单位,虚拟机规范中没有指明Slot应占用的内存大小(每个Slot都应该能存放一个boolean,byte,char,int,float,reference,returnAddress)类型的数据,允许Slot的长度随着处理器,操作系统,虚拟机的原创 2020-05-15 14:12:25 · 294 阅读 · 0 评论 -
class文件结构
class的结构类型无符号数u1, u2, u4, u8, 分别代表一个字节.两个字节,四个字节,八个字节. 可以用来存储数字,索引引用,数量值,或者按照utf-8编码的字符串值表表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有的表都习惯性的用_info结尾,表用于描述有层次关系的复合结构的数据,整个class文件的本身就是一张表magic魔数用于确定这个文件是否为虚拟机所接受的文件. 固定值0xCAFEBABEminor_version次版本号JDK次版本号major_v原创 2020-05-14 10:57:21 · 110 阅读 · 0 评论 -
jvm运行区域-程序计数器
程序计数器含义:程序计数器是一个很小的线程私有内存作用:当前线程所执行的字节码的行号指示器字节码解释器通过改变计数器的值来选取下一条需要执行的字节码指令当线程执行一个java方法记录的是虚拟机字节码指令的地址当线程执行一个本地native方法计数器的值为undefined...原创 2020-05-12 16:17:43 · 66 阅读 · 0 评论 -
GC Roots算法中对象的销毁过程
在根搜算法中不可达的对象也并非是非死不可真正宣告一个对象的死亡至少要经历两次标记的过程如果对象在进行跟搜索后发现没有与GC Roots相连接的引用链那它将会被第一次标记并且进行一次筛选筛选条件:此对象是否有必要执行finalize()方法当前对象没有重写finalize()方法,或者finalize()方法已经被虚拟机调用过了虚拟机将以上两种情况都视为没有必要执行如果这个对象被判定为有必要执行finalize()方法那么这个对象将会被放置到F-Queue队列中,并在稍后被虚拟机创建的,低优先级原创 2020-05-12 16:09:43 · 140 阅读 · 0 评论 -
java引用的四种类型
强引用类似Object o = new Object()这种引用只要引用还存在垃圾回收器对象永远不会回收被引用的对象软引用用来描述一些还有用,但是不是必须的对象系统将要发生内存溢出之前,系统会将这些对象列入回收范围之内,并进行二次回收提供了SoftReference来实现软引用弱引用也是用来描述一些非必须的对象,他的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾回收之前,无论当前内存是否够用,都会回收掉被弱引用关联的对象提供了WeakReference来实现弱引用虚引用原创 2020-05-12 14:47:19 · 89 阅读 · 0 评论 -
垃圾回收算法
引用计数算法存在引用计数加1引用消失计数减1计数为0时表示没有引用对象,可以被回收缺点:相互引用的时候不能被回收根搜算法通过一系列名为"GC Roots"的对象作为起始点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(从GC Roots到这个对象不可达),则证明这个对象可以被回收...原创 2020-05-12 14:30:19 · 72 阅读 · 0 评论 -
ClassCastException同一个类不能转换的问题
原因需要转换的类不在同一个类加载器名称空间案例public class MyPerson { private MyPerson myPerson; public void setMyPerson(Object object) { this.myPerson = (MyPerson)object; }}当我们使用自定义类加载器加载这个MyPers...原创 2020-04-19 15:11:07 · 2049 阅读 · 0 评论 -
类的卸载
1,由根类加载器,扩展类加载器,系统类加载器加载的类会一直保持引用状态,不会被卸载2,我们自己定义的类加载器是可以被卸载的当一个对象没有被引用的时候,调用System.gc();方法这个类就会被卸载开启卸载类的JVM参数,就可以看到类的被卸载信息-XX:+TraceClassUnloading//主动使用,对类进行加载Cat a = new Cat();a=null;//调用此方法...原创 2020-04-17 12:37:46 · 303 阅读 · 0 评论 -
类加载器的命名空间
学习记录——张龙jvm每一个类加载器都有自己的命名空间,命名空间是由当前得类加载器及其父加载器所加载的类组成在同一命名空间不会出现类的完整名字(包括类的报名)相同的两个类在不同的命名空间有可能出现类的完整名字(包括类的包名)相同的两个类举例自己定义类加载器new两个类加载器加载的类的hashcode不一样因为在各自的命名空间都会加载一次...原创 2020-04-16 20:53:34 · 89 阅读 · 0 评论 -
类的主动使用的七种情况
对圣思源张龙的jvm学习总结(学习记录)创建类的实例访问类的静态变量,或者给静态变量赋值访问类的静态方法反射初始化一个类的子类,父类也会被加载Java虚拟机被标注为启动类的类...原创 2020-04-06 19:55:56 · 135 阅读 · 1 评论 -
JVM类的执行过程
JVM类的执行过程加载 //类加载器加载类连接校验 //class文件有可能被人为修改准备 //为静态变量开辟空间,并初始化为默认值解析 //将符号引用解析成直接引用(指针)初始化使用卸载...原创 2020-04-04 20:30:07 · 87 阅读 · 0 评论