`
zhangchunxiao
  • 浏览: 15619 次
社区版块
存档分类
最新评论

浅谈java中的堆栈(一)

    博客分类:
  • Java
 
阅读更多

Java把内存分成两种,一种叫做堆内存,一种叫做栈内存:在执行过程中会划分4个内存区域(heap、stack、data segment、code segment)。

java开始执行会把代码加载到code segment区域然后找到main方法开始执行;

heap(堆):new出来的东西放到这里;
stack(堆栈):局部变量;
data segment:静态变量或字符串常量;
code segment:存放代码;

 

举例:

Student stu = new Student();
//stu是对象Student()的引用,stu存放在栈中,可以把stu理解为一个指针,指向所存放在堆中的对象.
//当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,
//java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用.
//堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.

  简述下堆与栈的区别:

1.stack(堆栈)的空间由操作系统自动分配和释放,heap(堆)的空间是手动申请和释放的,heap常用new关键字来分配。

2.stack(堆栈)空间有限,heap(堆)的空间是很大的自由区。

3.在Java中,若只是声明一个对象,则先在栈(stack)内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。

举例:

Object a =null;//这样定义的在栈区,只在栈内存中分配空间.
Object b =new Object(); //这样定义的就在堆区,在堆内存中分配空间.

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics