文章列表
JVM是怎么处理类和对象的呢?
类的生命分为装载、连接和初始化三步。其中连接又分为:验证、准备和解析,解析在这里是可选的。
装载:读入该类型的二进制数据流,生成方法区数据结构,在堆上为该类型创建一个java.lang.Class类的实例。
验证:确认类型符合java的语义,比如检查是否一个final类拥有子类或者是否一个final方法被重载。
准备:JVM为类变量分配内存,设置默认初始值(不是java代码中指定的值,而是默认的缺省值)。
解析:就是在该类的常量池中寻找类、接口、字段和方法的符号引用,将其替换成直接引用。
初始化:在类或者接口被首次主动访问前,为类变量赋予正确的初始值,如果类存 ...
- 2009-11-04 19:13
- 浏览 828
- 评论(0)
final关键字的三种用法:
1、final数据
final常量分为编译期常量和非编译期常量
//编译期常量
final int FINAL_DATA = -1;
//非编译期常量,可以动态确定final常量的值,不同
//的对象可以有不同的常量值
final int i = (int)(Math.random()) ;
//静态非编译期常量,首次初始化的时候确定值,
//所有对象拥有相同的常量值
static final int i = (int)(Math.random());
final不仅可以修 ...
学习Java字节码有助于理解Java内存结构,加深对JVM的理解。
首先需要知道JVM内存由堆、栈、方法区、本地方法栈组成。
堆中存放JVM生命周期里所有的类的实例。
栈中存放函数中的基础类型局部变量、函数中实例变量的引用。
方法区存放Class、Method的信息以及Static的变量。
本地方法栈存放调用本地方法时用到的变量。
JVM为每个线程都分配了一个方法栈,方法栈包含不同方法的栈帧,每个方法都有一个栈帧,当前方法的栈帧称为当前栈帧,栈帧由局部变量区和操作数栈组成,所有线程共享堆中的数据。
下面以一个简单的Java程序He ...
- 2009-11-03 17:01
- 浏览 2338
- 评论(1)