您的位置:首页 > 编程语言 > Java开发

java数据区的一些简单介绍

2006-04-14 01:06 323 查看
这几天看了JVM方面的书,在书上提到,虚拟机主要把数据区分成了方法区,堆栈区,堆,PC计数器和本地方法区.
PC计数器就是存放jvm指令的区域.
 本地方法区用来调用当前系统的方法函数,和一些动态连接库有关的区域.
 一般主要讨论的是方法区,堆,栈三个数据区.
 堆主要存放实际的对象,在这里又涉及到了如何释放对象的问题,这样又是另外一个技术GC.
栈中主要存放 对象的引用,一些局部变量,参数,中间结果值,返回值等等.
 而方法区:主要存放类的一些信息:其实这个方法区是最重要的,当加载类的时候,jvm会从字节码中提取出有用的信息 按照设计好的数据结构和算法来存放信息.
  按类型来分:类的信息(名字,类型,修饰符,)类的变量(也就是静态变量)字段的信息(数据类型,名字,修饰符),方法的信息(名字,参数的个数和类型,返回值,修饰符),
 还有每个方法的代码(也就是字节码),
  好象还有异常(因为有些类可能要抛出异常),也不知道怎么存的.
  而在这方法区中最重要的又是常量池:简单的说就是字符串,在这个类的信息中所有用到的 字符.
不同的虚拟机对这些区域的设计实现都是非常不同的,在设计这些程序的时候就需要非常好的数据结构的知识和算法知识了.

举个例子:
public class SimpleClass{
private int age=20;
private String name=new String("simpleclass");
static String country="China";

public int getAge(){
return age;
}

在上面例子中,当加载类的时候,jvm分析字节码会把simpleClass的名字"SimpleClass" 类型"class" 修饰符"private " ; country的类型"String"+"static"+"country"+值"China" ;
age的类型"int"+名字"age"+修饰符"private"+值"20" ; getAge()方法的信息(包括代码)也都存到方法区里.
 而且;name 的类型"String"+修饰符"private"+名字"name" + new String("China")的字符串也保存到方法区中,这是并没有对象生成,但这个类实例化后,执行到这一步的时候,jvm会解析这个,发现是对一个String 的引用,这样就会经过比较复杂的经过,在堆中分配对象,而且把这个引用压入到当前的栈中.
  好象很多的信息都是存放在常量池中,具体怎么样我还没有看过.

上面写的应该有些地方是错的,希望大家一起来探讨了

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: