Posted on 2009-11-02 14:31
疯狂 阅读(212)
评论(0) 编辑 收藏 所属分类:
java
当一个Java虚拟机运行一个程序时,他需要很多东西,例如字节码,从已经装在的class文件中得到的其他信息,程序创建时候的对象,传递给方法的参数,返回值,局部变量,以及运算的中间结果等等。
每个java虚拟机实例都有一个方法区和一个堆,他们是由该虚拟机实例中的所有线程共享的。
1, 当虚拟机装载一个class文件时,他会从这个class文件包含的二进制数据中解析类型数信息然后放在方法区中,具体如下:
2, 当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放在堆中。
3, 每当一个线程创建时,他都将得到他自己的PC寄存器以及一个java载,如果线程正在执行的是一个java方法(非本地方法),那么pc寄存器的值总是指向下一条将被执行的指令,而他的java载总是存储方法调用的状态-----包括他的局部变量,参数,返回值,以及中间的结果等等。而本地方法的状态则是以某种依赖于具体实现的方式存储在本地方法中,也可能是在寄存器或者其他某些与特定实现相关的内存区中.
1.1数据类型
类型分为两种基本和引用类型.
Java语言中所有的基本类型也是虚拟机中的基本类型,特殊情况:boolean有点特别,当编译器吧java源码编译成自己嘛事,他会以int或者byte来表示boolean.false是有整数零表示,所有非零整数用来表示true。boolean数组是当做byte数组来访问的,在堆中,他也可以被表示为位域。
1.2
Java虚拟机中最基本的数据单元就是字,有设计者决定,字长至少是一个单元就持有byte,short,int,char,float,returnAddress(虚拟机内部使用)或者reference(引用类型),两个字节就能够持有long和double类型的值。由此虚拟机实现至少选择32字长或者更高。通常那个根据底层主机的指针长度来选择字长。
1,3 类装载系统
Java有两种类装载系统:启动类装载器和用户自定义装载器。 每一个被装载的类型,java虚拟机都会为他创建一个java.lang.class类的实例来代表该类型,用户自定义的类装载器和class实例都放在堆区,而装载的类型信息都放在方法区。
类装载的过程:装载(查找并装载类型的二进制信息,将类信息系放在放在方法区),连接(验证,准备(为类变量分配内存,并将其初始化为默认值,解析(为类变量初始化正确的初始值))),在jdk1.1时:启动类装载器会首先在用户配置的classpath下寻找.class文件,而1.2 搜索classpath的任务交给了系统类装载器----自定义的类装载器。