当我们站在JVM实现的角度去看方法调用的时候,我们自然会想到一种分类: 1、编译代码的时候就知道是哪个方法,永远不会产生歧义,例如静态方法,private方法,构造方法,super方法。 2、运行时才能确定是哪个方法,这也正是多态的实现原理。 对于第一种方法的调用,有2个字节码指令:invokest ...
分类:
其他好文 时间:
2016-11-20 18:40:03
阅读次数:
144
Java字节码指令 Java 字节码指令及javap 使用说明 ### java字节码指令列表 JVM指令助记符 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:istore,istor ...
分类:
编程语言 时间:
2016-11-18 18:22:08
阅读次数:
261
Java内存管理:深入Java内存区域 上面的文章对于java的内存管理机制讲的非常细致,在这里我们只是为了便于后面内容的理解,对java内存机制做一个简单的梳理。 程序计数器:当前线程所执行的字节码的行号指示器,虚拟机下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要 ...
分类:
编程语言 时间:
2016-11-16 02:52:28
阅读次数:
172
虚拟机是如何执行方法中的字节码指令的。许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,在解释执行时,虚拟机执行引擎是如何工作的。 解释执行 不论是解释还是编译,也不论是物理机还是虚拟机,对于应用程序,机器都不可能 ...
分类:
其他好文 时间:
2016-11-13 09:35:39
阅读次数:
123
Java虚拟机的字节码指令集的数量从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化。随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言”(Dynamically Ty ...
分类:
其他好文 时间:
2016-11-13 09:28:37
阅读次数:
336
第二章 一、Java运行时的数据区域: (1)程序计数器:程序计数器用于存储正在执行的虚拟机字节码指令的地址,每个线程有自己独立的程序计数器 (2)虚拟机栈: 1)虚拟机栈是线程私有的,虚拟机栈是java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量、操作数帧、动态链接、方 ...
分类:
其他好文 时间:
2016-11-12 23:01:02
阅读次数:
246
JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规 ...
分类:
编程语言 时间:
2016-11-12 22:51:57
阅读次数:
236
这是我们经常碰到的烦人的String比较问题,要得到答案,就要弄清楚aa()方法中的s3的内存在哪里?,和bb()方法中的s1的内存在哪里? 不多说,贴上a.class文件反编译的字节码指令: 首先是 aa()方法: 针对其中的一些解释:(下面的数字是字节码偏移量) 24 为何在sb.toStrin ...
分类:
其他好文 时间:
2016-11-05 23:08:37
阅读次数:
208
一道String字符串比较问题引发的字节码分析 这是我们经常碰到的烦人的String比较问题,要得到答案,就要弄清楚aa()方法中的s3的内存在哪里?,和bb()方法中的s1的内存在哪里? 不多说,贴上a.class文件反编译的字节码指令: 首先是 aa()方法: 针对其中的一些解释:(下面的数字是 ...
分类:
其他好文 时间:
2016-11-05 11:36:46
阅读次数:
220
一、运行时数据区域 1、程序计数器是线程的私有空间,每个线程都有。针对线程执行的是Java代码还是Native代码有两种取值,Java代码时:虚拟机字节码指令的地址;Native代码时:计数值为Undefined。不可能出现OutOfMemeoryError情况。 2、Java虚拟机栈是线程的私有空 ...
分类:
编程语言 时间:
2016-11-02 01:18:22
阅读次数:
303