java数据区的一些简单介绍

这几天看了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 的引用,这样就会经过比较复杂的经过,在堆中分配对象,而且把这个引用压入到当前的栈中.
  好象很多的信息都是存放在常量池中,具体怎么样我还没有看过.

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值