java程序的运行机制,首先就要对jvm有一个简单的认识,java程序的运行借助于jvm。jvm是可以理解为一个实体计算机的模拟,有自己的ram、寄存器等“硬件”,jvm运行的是经过java编译器编译之后的字节码文件,也就是...
分类:
编程语言 时间:
2014-10-22 13:03:10
阅读次数:
180
Java虚拟机管理的内存包括以下几个运行时数据区域:1.程序计数器: 程序计数器是一块比较小的内存空间,是当前线程执行的字节码行号指示器。Java多线程是通过线程轮流切换来实现的,所以每个线程都有一个自己独立的程序计数器,各个线程的程序计数器互补干扰。2.Java虚拟机栈 Java虚拟机栈描述的.....
分类:
其他好文 时间:
2014-10-22 10:52:41
阅读次数:
161
由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:
如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载...
分类:
其他好文 时间:
2014-10-21 21:43:46
阅读次数:
231
This is a list of the instructions that make up theJava bytecode, an abstract machine language that is ultimately executed by theJava virtual machine....
分类:
编程语言 时间:
2014-10-21 21:24:20
阅读次数:
277
java 虚拟机自动内存管理。java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同区域1 程序计数器每个线程都有一个独立的计数器,用来指示需要执行的字节码的位置。2 虚拟机栈虚拟机栈是用来描述java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于储存局部变量表...
分类:
编程语言 时间:
2014-10-21 19:37:14
阅读次数:
197
其实,我不确定Quercus是否可以被认定为一门JVM语言;其次Quercus这个东东分开源版与商业版,开源版只能解释执行、而商业版能编译成Java字节码。但我知道国内,阿里巴巴很早就在使用它,当然,他主要是把它作为一个前端页面的模版引擎,提供给用户自定义商铺样式。这也是一种典型的使用场景。 ...
分类:
其他好文 时间:
2014-10-20 13:16:42
阅读次数:
224
在前一篇文章中,我们通过分析OAT文件的加载过程,认识了OAT文件的格式,其中包含了原始的DEX文件。既然ART运行时执行的都是翻译DEX字节码后得到的本地机器指令了,为什么还需要在OAT文件中包含DEX文件,并且将它加载到内存去呢?这是因为ART运行时提供了Java虚拟机接口,而要实现Java虚拟机接口不得不依赖于DEX文件。本文就通过分析ART运行时加载类及其方法的过程来理解DEX文件的作用。...
分类:
移动开发 时间:
2014-10-20 02:09:12
阅读次数:
351
之前看过一篇关于return和finally执行顺序的文章,仅在Java的语言层面做了分析,其实我倒觉得直接看bytecode可能来的更清晰一点。
最近一直在看Java虚拟机规范,发现直接分析bytecode更能加深对Java语言的理解。
先看一个只有try-finally,没有catch的例子。
try - finally
public class ExceptionTest {...
分类:
其他好文 时间:
2014-10-19 23:18:20
阅读次数:
225
在本系列的最后三篇文章中,我展示了如何用 Javassist 框架操作类。这次我将用一种很不同的方法操纵字节码——使用 Apache Byte Code Engineering Library (BCEL)。与 Javassist 所支持的源代码接口不同,BCEL 在实际的 JVM 指令层次上进行操...
分类:
编程语言 时间:
2014-10-19 23:00:52
阅读次数:
421
本系列的第 4 部分和第 5 部分讨论了如何用 Javassist 对二进制类进行局部更改。这次您将学习以一种更强大的方式使用该框架,从而充分利用 Javassist 对在字节码中查找所有特定方法或者字段的支持。对于 Javassist 功能而言,这个功能至少与它以类似源代码的方式指定字节码的能力同...
分类:
编程语言 时间:
2014-10-19 22:52:12
阅读次数:
445