在Java的自动内存分配中,我们看到一句话: 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值则是为空(undefined); 问题: 我们知道,程序计数器用来存放字节码指令地址;通过这个地址,虚拟机就能知道执行 ...
分类:
编程语言 时间:
2018-01-28 22:01:14
阅读次数:
1056
深入理解Java虚拟机 1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收 ...
分类:
其他好文 时间:
2018-01-24 13:59:39
阅读次数:
138
一、类加载时机: 1、类初始化时机 1)遇到new、getstatic、putstatic或invokestatic这四个字节码指令时,如果类没有进行过初始化,则需要先对其进行初始化。 2)使用Java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先出发器初 ...
分类:
其他好文 时间:
2018-01-23 23:20:08
阅读次数:
312
JVM是Java程序的运行环境,它同时也是一个操作系统的一个应用程序、一个进程,因此他也有他自己的运行生命周期,也有自己的代码和数据空间.JVM包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。首先来说一下JVM工作原理中的jdk这个东西,不管你是初学者还是高手,是j2ee程 ...
分类:
其他好文 时间:
2018-01-21 11:10:53
阅读次数:
195
1. 程序计数器(Program Counter Register)当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值则为空(Undefined)。线程私有。唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。2. Java虚拟机栈(Java
分类:
编程语言 时间:
2018-01-21 01:10:59
阅读次数:
223
有时候为了能理解JVM对程序所做的优化等,需要查看程序的字节码,因此知道了解一些常见的指令集很重要! 指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将in ...
分类:
编程语言 时间:
2018-01-14 12:08:01
阅读次数:
216
程序计数器 程序计数器干嘛的? 有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个。 无论是取下一条指令还是分支、循环、跳转、中断、线程恢复,都需要这个程序计数器。 程序计数器存在哪? 虚拟机区别于硬件,组成原理里学的程序计数器是用CS和IP寄存器来存,来表示指令地址。 而Java把程序计 ...
分类:
编程语言 时间:
2017-12-31 14:45:24
阅读次数:
179
由于JVM是基于栈的结构,所以任何的操作都需要经过入栈和出栈来完成。 我们都知道所谓的多线程在一个特定的时间段内只会执行其中一个线程的方法,CPU会不停的做任务切换,那么为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是每个线程都分配一个PC寄存器,这样一来各个线程之间便可以进 ...
分类:
其他好文 时间:
2017-12-31 00:35:58
阅读次数:
154
看了一下老陈写的模仿JDK动态代理,从中取一部分单独扩展,模拟一下IDE上的run过程(不愧是老陈,去年写的东西我要现在才能理解) 对run过程的猜想 在点击run的过程中应该做了不少事。先编译运行run工具,执行引擎增加一个线程开始执行被加载的run工具的字节码指令;线程执行过程中将目标源码进行编 ...
分类:
其他好文 时间:
2017-12-30 19:58:05
阅读次数:
157
一、内存管理 二、线程独占区之程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理 ...
分类:
编程语言 时间:
2017-12-30 00:23:52
阅读次数:
1097