务实java虚拟机
文章平均质量分 73
weixin_41186611
这个作者很懒,什么都没留下…
展开
-
务实java虚拟机——常量池详解
常量池,用于存放编译期生成的各种字面常量(编译期间就能确定的数据,存储的是实际的数据大小)和符号引用(类或接口的全限定名,字段的名称和描述符,方法的名称和描述符)class文件常量池是Java文件经过编译后生成的class文件中的一部分,它主要包含以下图片中的内容分为字面量和符号引用。规范并不要求常量只能在运行时才产生,也就是说运行时常量池的内容并不全部来自。在jvm中,常量池分为class文件常量池,运行时常量池,字符串常量池。文件常量池和运行时常量池中,都没有直接存储字面量对应的实际对象。...原创 2022-07-30 10:41:14 · 287 阅读 · 1 评论 -
务实java虚拟机——双亲委派模型详解
这中层次关系称为双亲委派模型,双亲委派加载机制是当一个类加载器加载一个类时,首先将加载这个类的任务交给其父类类加载器,然后一直向上直到启动类加载器,如果父类类加载器不能加载才交给子类加载器去加载,这样保证了基础类性在不同的环境中是同一个类。Java保持着三层类加载器,双亲委派的类加载架构,类加载器层次结构从上到下是启动类加载器、平台类加载器、应用程序类加载器、自定义加载器。2、通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。如何主动破坏双亲委派机制?..原创 2022-07-27 15:37:17 · 158 阅读 · 0 评论 -
务实java虚拟机——类加载过程详解
符号引用就是一组符号来描述所引用的目标。解析阶段的目的,是将常量池内的符号引用转换为直接引用的过程(将常量池内的符号引用解析成为实际引用)。如果符号引用指向一个未被加载的类,或者未被加载类的字段或方法,那么解析将触发这个类的加载(但未必触发这个类的链接以及初始化。验证确保class文件中的字节流包含的信息,符合当前虚拟机的要求,保证这个被加载的class类的正确性,不会危害到虚拟机的安全。类加载的时机触发一个类进行加载分为主动加载和被动加载,主动加载比如有new关键字、使用静态字段、调用静态方法等。...原创 2022-07-27 15:33:33 · 125 阅读 · 0 评论 -
务实java虚拟机——内存分配原则详解
新生代使用了复制收集算法,在一次MinorGC后,如果有大量对象存活,需要把Survivor无法容纳的对象直接送入老年代,但它的前提是保证老年代有那么大的空间。老年代的空间大小就承担的担保的职责。虚拟机并不是永远要求对象的年龄必须达到-XXMaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到-XXMaxTenuringThreshold中要求的年龄。...原创 2022-07-27 15:27:49 · 293 阅读 · 0 评论 -
务实java虚拟机——常用的垃圾回收器详解
parallelScavenge收集器也是新生代收集器,其注重的是吞吐量这个指标,吞吐量是运行用户代码时间占用的比值大小,这个值不是越大越好,因为如果垃圾收集时间较少,虽然提高的吞吐量,但时间少了,收集的垃圾就越少,每一次收集过后会造成垃圾的积累,对内存大小造成压力。3)重新标记(为了修正并发标记期间因用户程序继续运作而导致标记变动的那一部分对象的标记记录;serial是用在新生代的垃圾收集器,是一个单线程收集器,单线程的意思是,在垃圾收集的时候只有垃圾收集线程在运行,用户线程全部被停止。...原创 2022-07-27 15:27:09 · 117 阅读 · 0 评论 -
务实java虚拟机系列——垃圾收集详解
进而在回收频率上,对新生代经常回收,老年代则间隔长些。但划分区域并不是如此简单,会有跨代引用的问题,如果在对新生代进行回收时,某个对象是被老年代中的对象引用,碍于这种情况,每次都要对老年代中的对象进行遍历。但是经过验证,有了另一条经验存在互相引用关系的两个对象,是应该倾向于同时生存或者同时消亡的,并且在对新生代的回收时,那些存在跨代引用的对象也应该升级到老年代中。首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。...原创 2022-07-27 15:20:41 · 70 阅读 · 0 评论 -
务实java虚拟机——运行时数据区详解
在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到了方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体虚拟机的实现。Java虚拟机规范规定,Java堆可以出于物理上不连续的内存空间中,只要逻辑上连续即可,如同磁盘空间一样,既可以实现成固定大小,也可以是扩展的,当前主流虚拟机都是按照扩展来实现的(通过-Xmx和-Xms控制)。此处的调用方的形参x被放入操作数栈,同时,被调用方的局部变量表也共享了此处区域。...原创 2022-07-27 15:15:03 · 106 阅读 · 0 评论