戎码人生

世界上有10种人,一种懂二进制,一种不懂二进制 !

类加载机制

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶...

2016-10-25 15:30:27

阅读数:6220

评论数:0

类初始化

主动引用类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始...

2016-10-25 15:29:22

阅读数:4569

评论数:0

多态性实现机制——静态分派与动态分派

方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用...

2016-10-25 15:28:49

阅读数:6210

评论数:0

Java语法糖

语法糖来源 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟...

2016-10-25 15:28:10

阅读数:6725

评论数:0

Java内存区域与内存溢出

Java内存区域 程序计数器 当前线程所执行的字节码的行号指示器 当前线程私有 不会出现OutOfMemoryError情况 java虚拟机栈 线程私有,生命周期与线程相同 java方法执行的内存模型,每个方法执行的同时都会创建一个栈帧,存储局部变量表(基本类型、对象引用)、操作数栈、动态链接、...

2016-10-25 15:27:30

阅读数:4672

评论数:0

Java垃圾收集机制

对象引用Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例。谈到Java堆中的垃圾回收,自然要谈到引用。在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。但...

2016-10-25 15:26:55

阅读数:6980

评论数:0

Javac编译与JIT编译

编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: - 其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScri...

2016-10-25 15:25:45

阅读数:6811

评论数:0

Class类文件结构

平台无关性 如图,源码经过编译得到的字节码文件可以由运行Java虚拟机的机器运行,因此可以说字节码是Java语言跨平台的基石,同样也是其他语言跨平台的有效途径只要目标语言的编译器按照Java字节码存储规范进行编译,那么得到的class文件都可以被正确执行 Class文件结构 Class文件是一组以...

2016-10-25 15:24:53

阅读数:6227

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭