Java华丽转身 —— 内存学习

 

Java华丽转身 —— 内存学习

分类: Java J2SE   662人阅读  评论(55)  收藏  举报

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

 

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

 

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

 

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

 

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

     


堆和栈的比较:

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

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

 

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

 

例子:

    

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public class Testshuzu{  
  2.     //主程序  
  3.    public static void main(String[] args){  
  4.       //定义数组  
  5.      Date[] days;  
  6.      days = new Date[3];  
  7.      for(int i = 0; i < 3;i++){  
  8.          days[i] = new Date(2004,4,i+1);  
  9.      }  
  10.    }  
  11. }  
  12. //定义Date有三个变量  
  13. class Date{  
  14.   int year;   
  15.   int month ;  
  16.   int day;  
  17.   Date(int y, int m,int d){  
  18.      year = y; month = m;  
  19.      day = d;  
  20.   }  
  21. }  

内存图:

    

总结:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值