上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页
摘要: Java编译器输出的指令流,基本上[1]是一种基于栈的指令集架构,它们依赖操作数栈进行工作 与之相对的另外一套常用的指令集架构是基于寄存器的指令集 举个最简单的例子,分别使用这两种指令集计算“1+1”的结果,基于栈的指令集会是这样子的: 基于栈的指令集主要的优点就是可移植, 缺点是执行速度慢,相同操 阅读全文
posted @ 2019-04-09 19:48 龘人上天 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: 偏向锁 偏向锁也是JDK 1.6中引入的一项锁优化,它的目的是消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能。如果说轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量,那偏向锁就是在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。 当锁对象第一次被线程获取的时候,虚拟 阅读全文
posted @ 2019-04-09 19:47 龘人上天 阅读(290) 评论(0) 推荐(0) 编辑
摘要: JAVA虚拟机规范中定义使用一种JAVA内存模型来屏蔽掉各种硬件及操作系统的内存访问差异. 内核线程实现 内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程 阅读全文
posted @ 2019-04-09 19:38 龘人上天 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 解释器与编译器两者各有优势: 当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。当程序运行环境中内存资源限制较大(如部分嵌入式系统中),可以使用解释执行节约内 阅读全文
posted @ 2019-03-29 18:00 龘人上天 阅读(512) 评论(0) 推荐(0) 编辑
摘要: invokevirtual指令 invokevirtual指令的运行时解析过程大致分为以下几个步骤: 这个过程就是Java语言中方法重写的本质。我们把这种在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。 虚拟方法表 由于动态分派是非常频繁的动作,而且动态分派的方法版本选择过程需要运行时在 阅读全文
posted @ 2019-03-28 09:15 龘人上天 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 静态方法会在类加载期就进行解析,而静态方法显然也是可以拥有重载版本的,选择重载版本的过程也是通过静态分派完成的。 //结果 我们把上面代码中的“Human”称为变量的静态类型(Static Type),或者叫做的外观类型(Apparent Type),后面的“Man”则称为变量的实际类型(Actua 阅读全文
posted @ 2019-03-27 17:55 龘人上天 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 局部变量表 类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值;另外一次在初始化阶段,赋予程序员定义的初始值。 局部变量不像前面介绍的类变量那样存在“准备阶段”,即使在初始化阶段程序员没有为类变量赋值也没有关系,类变量仍然具有一个确定的初始值。但局部变量就不一样,如果一个局部变量定义了但没有 阅读全文
posted @ 2019-03-27 17:50 龘人上天 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 定义 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性 阅读全文
posted @ 2019-03-27 14:13 龘人上天 阅读(125) 评论(0) 推荐(0) 编辑
摘要: “加载”是“类加载”(Class Loading)过程的一个阶段, 在加载阶段,虚拟机需要完成以下3件事情:1)通过一个类的全限定名来获取定义此类的二进制字节流。2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。3)在内存中生成一个代表这个类的java.lang.Class对象,作为 阅读全文
posted @ 2019-03-26 09:11 龘人上天 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的 阅读全文
posted @ 2019-03-26 08:38 龘人上天 阅读(206) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页