首页 > 其他 > 详细

Java内存学习

时间:2014-01-21 00:28:50      阅读:361      评论:0      收藏:0      [点我收藏+]

            Java的内存主要包含4块,即heap(堆内存)、stack(栈内存)、datasegment(静态变量或是常量存放区)、codesegment(方法区)  

 

栈:存取速度快,存放一些基本类型的变量或对象的引用变量。主要用来执行程序的。

 

:    存取速度慢,通过New()方法来创建的对象或数组。主要用来存放对象的。

 

静态常量区:存放的是静态变量(类变量)或是常量

 

方法区:存放的是对象的方法。因此即使new出多个对象也是只是存在一个方法。

     bubuko.com,布布扣


堆和栈的比较:

   堆主要用于存放对象,栈主要是用来执行程序。

       栈的优势:存取速度比堆要快,仅次于寄存器,栈数据可以共享。缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量和对象句柄。修改栈指针就可以把栈中的内容销毁,这样模式速度最快。但是需要注意,分配空间时,应事先知道这个数据区的大小。

 

           堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。由于堆是动态的分配,编译器不需要知道从堆里分配多少空间或者是数据要停留多长时间,因此用堆保存数据灵活性更大。缺点是,由于要在运行时动态分配内存,在分配和销毁时都要占用时间,因此效率非常低。

 

例子:

    

public class Testshuzu{
    //主程序
   public static void main(String[] args){
      //定义数组
     Date[] days;
	 days = new Date[3];
	 for(int i = 0; i < 3;i++){
	     days[i] = new Date(2004,4,i+1);
	 }
   }
}
//定义Date有三个变量
class Date{
  int year; 
  int month ;
  int day;
  Date(int y, int m,int d){
     year = y; month = m;
	 day = d;
  }
}

内存图:

    bubuko.com,布布扣

总结:

    通过了解,学习这些内存的运行情况,更容易理解程序的运行情况,从而从更高效的角度去写程序,优化程序。



Java内存学习

原文:http://blog.csdn.net/liutengteng130/article/details/18402803

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!