`
linmomo02
  • 浏览: 180588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的堆内存和栈内存

阅读更多

栈(stack):

     是一个后进先出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).

     栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的。所以栈内存中存放的都是方法运行中声明的基本数据类型,如short,int,long等,他们的长度都是一定的,并且生存期都是随着方法的结束而结束。

堆(heap):

      堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢,C中的malloc语句所产生的内存空间就在堆中. 在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用.堆内存中数据的生存期是由java的回收机制确定的,当栈中没有引用指向堆中的内存的时候,内存就会被回收。

3
1
分享到:
评论
5 楼 linmomo02 2012-03-21  
mfkvfn 写道
“先进后出”听说很别扭,一般不是称“后进先出”吗?

嗯。也是,虽然是一个意思但后面的那个说法好像更专业一些。
4 楼 mfkvfn 2012-03-21  
“先进后出”听说很别扭,一般不是称“后进先出”吗?
3 楼 lvjun106 2012-03-20  
http://lvjun106.iteye.com/blog/1451866
参考看一看吧。
2 楼 linmomo02 2012-03-20  
lvjun106 写道
当栈中没有引用指向堆中的内存的时候,内存就会被回收。

应该是当栈中没有引用指向堆中的内存的时候,内存就会被回收。

小弟菜鸟,弱弱的问一下老大,何谓强引用
1 楼 lvjun106 2012-03-20  
当栈中没有引用指向堆中的内存的时候,内存就会被回收。

应该是当栈中没有引用指向堆中的内存的时候,内存就会被回收。

相关推荐

    Java中堆内存和栈内存详解

    这段代码首先在栈内存中创建了一个引用变量`x`,然后在堆内存中创建了一个包含100个整数元素的数组,并将该数组的地址赋值给`x`。因此,`x`实际上是指向堆内存中数组的引用。 **引用变量的特点:** - 引用变量本身...

    Java中堆内存和栈内存详解.doc

    `p1`和`p2`作为引用变量被存储在栈内存中,而Person对象本身则位于堆内存中。当`shout()`方法被调用时,它的局部变量(如果有的话)将在栈内存中分配。 #### 五、内存分配策略 在Java中,内存分配遵循以下几种原则...

    Java中堆内存与栈内存分配浅析

    本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。 #### 二、堆内存与栈内存概述 ##### 1. 堆内存 堆内存是Java虚拟机(JVM)用于存储...

    Java中堆内存和栈内存详解文.pdf

    Java编程语言将内存划分为两种主要区域:栈内存和堆内存。栈内存主要用来存储基本类型(如int、char)的变量和对象的引用,而堆内存则用于存储通过`new`关键字创建的对象和数组。 栈内存的工作方式类似于数据结构中...

    Java中栈内存和堆内存详解

    Java中栈内存和堆内存详解,非常容易理解

    java 中堆内存和栈内存理解

    Java编程语言将内存分为两种主要区域:堆内存(Heap Memory)和栈内存(Stack Memory),这两部分内存各有其特点和用途。 栈内存主要用于存储程序执行过程中的一些临时数据,包括基本类型变量(如int、float、...

    Java 中的堆和栈

    栈内存中的数据可以共享,比如在创建多个相同值的基础类型变量或引用相同对象时,Java可能会复用已存在的值或引用,而不是每次都创建新的。例如,`int a = 3; int b = 3;` 在这种情况下,a和b都指向栈中同一个3的值...

    Java中的堆和栈

    - **作用域限定**:栈内存中的变量在其定义的方法结束时就会被销毁,因此它的生命周期非常明确。 - **快速分配和释放**:栈内存的分配和释放速度快,因为它是基于线程的,随着方法的调用和退出自动完成。 - **数据...

    Java 中的堆和栈.doc

    栈内存中的数据大小和生存期在编译时是确定的,这使得它非常适合存储基本类型(如`int`, `double`, `boolean`等)和对象的引用。但是,栈内存不允许动态分配内存,因此其灵活性较低。 堆内存则提供了动态内存分配的...

    简述JAVA中堆内存与栈内存的区别

    在函数中定义的基本类型的变量和对象的引用变量都在函数的栈内存中分配。当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 栈内存的优势是,栈内存与堆内存相比是...

    区别Java中堆与栈区别Java中堆与栈

    在 Java 中,栈和堆都是自动管理的,程序员不能直接地设置栈或堆。Java 的垃圾收集器会自动收走这些不再使用的数据。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。例如,int a = 3; 和 int b = 3;,它们...

    Java中堆与栈的内存分配.pdf

    Java中的内存分配策略有三种:静态存储分配、栈式存储分配和堆式存储分配。静态存储分配是在编译时就能确定每个数据目标在运行时刻的存储空间需求的。栈式存储分配是由一个类似于堆栈的运行栈来实现的,程序对数据区...

    JavaSE基础篇 -- jdk配置,数组及其应用,栈和堆内存图解(Java源码)

    栈和堆是Java内存管理中的两个关键区域。栈主要用于存储局部变量、方法调用信息和常量。每次方法调用都会在栈上创建一个新的栈帧,当方法执行完毕,栈帧会被弹出,其内的变量也随之消失。栈内存的分配和释放非常快速...

    内存中堆和栈的区别

    内存中堆和栈的区别 内存中堆和栈是两个不同的概念,都是用来存放数据的内存区域,但它们有所区别。 内存分配方面 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。堆的分配方式类似于链表...

    JVM中堆内存和栈内存的区别

    Java虚拟机(JVM)是Java程序...总的来说,栈内存和堆内存各有优缺点,栈内存速度快但容量有限,堆内存容量大但管理复杂。在编程时,根据数据的生命周期和需求选择合适的内存区域,可以提高程序的性能并避免内存问题。

Global site tag (gtag.js) - Google Analytics