java中堆内存与栈内存区别

来源:互联网 发布:淘宝修改密码在哪里 编辑:程序博客网 时间:2024/06/06 01:52

http://blog.csdn.net/emira_j/article/details/51232611

堆和栈都是Java中常用的存储结构,都是内存中存放数据的地方。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我是可爱的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

堆:(对象)

引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。

堆内存主要作用是存放运行时创建(new)的对象。

(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)



栈:(基本数据类型变量、对象的引用变量)

基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。

栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。

(主要用来执行程序,存取速度快,大小和生存期必须确定,缺乏灵活性)

[java] view plain copy
  1. class 鸭子{       
  2.     private int age;  
  3.     private int weight;  
  4.     public 鸭子(int age,int weight){  
  5.          this.age=age;  
  6.          this.weight=weight;  
  7.     }  
  8. }  

[java] view plain copy
  1. public class Test{  
  2.     public static void main(String[] args){  
  3.         //int i=0;      //基本数据类型变量  
  4.         鸭子 duck =new 鸭子(1,1000);   //duck是对象的引用变量,存在栈;鸭子(1,1000)是实际的对象,存在堆。  
  5.     }  
  6. }  


图例如下: