Java中堆和栈的区别

来源:互联网 发布:java软件工程师资格证 编辑:程序博客网 时间:2024/05/29 08:20

       转载自:堆于栈的介绍

        java 的内存分为两类,一类是栈内存,一类是堆内存。

        栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。

        堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final 修饰后,放在堆中,而不是栈中。

        

       堆:(对象)

         引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过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. }  
0 0
原创粉丝点击