
JVM
文章平均质量分 96
-=Leessang=-
努力怀挺!!!
展开
-
深入理解Java虚拟机——Java语法糖
1. 泛型与类型擦除泛型是 JDK 1.5 的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、 接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。泛型技术在 C# 和 Java 之中的使用方式看似相同,但实现上却有着根本性的分歧C# 里面泛型无论在程序源码中、编译后的 IL 中(Intermediate Language,中间语言,这时候泛型是一个占位符)还是运行期的 CLR 中都是切实存在的原创 2020-07-29 10:46:36 · 177 阅读 · 0 评论 -
深入理解Java虚拟机——方法调用
前言:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用)这个特性给Java带来了更强大的动态扩展能力1.解析所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用这种解原创 2020-07-20 16:27:00 · 239 阅读 · 0 评论 -
深入理解Java虚拟机——主动引用 or 被动引用 ?
1.类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括了:加载 —— 验证 —— 准备 —— 解析 —— 初始化 —— 使用 —— 卸载2.初始化的时机?什么时候进行类的加载,虚拟机规范里面并没有强制约束。但是对于初始化阶段,虚拟机规范严格规定了有且只有四种情况必须对类进行初始化(加载、验证、准备自然要在此之前开始):1、遇到 new、putstatic、getstatic、invokestatic 这四条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化原创 2020-07-19 20:27:18 · 237 阅读 · 1 评论 -
深入理解Java虚拟机——垃圾收集器
程序计数器、虚拟机栈、本地方法栈三个区域随 线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定 性,在这几个区域内不需要过多考虑回收的问题Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有 在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存1. 对象已死?堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前,第一 件事情就是要确定这些..原创 2020-07-17 11:45:31 · 156 阅读 · 0 评论 -
深入理解Java虚拟机——Java内存区域
笔者将从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题,这是翻越虚拟机内存管理这堵 围墙的第一步。文章目录1. 运行时数据区域1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区1.6 运行时常量池1.7 直接内存2. 对象访问2.1 句柄访问2.2 直接指针访问1. 运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。1.1 程序计数器程序计数器(Program原创 2020-07-16 11:40:41 · 173 阅读 · 0 评论