本人小白,自学java,觉得有一些基础概念对于将来性能测试会有帮助。谢谢度娘,以下是一些民间高手总结的,精炼到位

谢谢“小闷暴走”

第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。

分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。

第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。

这种共享的收益是很多的。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),

另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。

第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。

由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,

因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。

第四,面向对象就是堆和栈的完美结合。其实,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。

但是,面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的思考。当我们把对象拆开,

你会发现,对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中。

我们在编写对象的时候,其实即编写了数据结构,也编写的处理数据的逻辑。不得不承认,面向对象的设计,确实很美。

谢谢“aliouswang”

例如 String str = new String("test");

这条语句,它的执行过程是先在堆上new 了一个值为"test"的String对象,然后栈上又新建一个str

来指向上面新建的"test"对象,即str是"test"的引用。

所以Java中对象的新建都是在堆上进行的,对象的引用一般都是在栈上。一般每个方法的调用都会独立有一个栈来保存str这样的对象的引用变量,在方法返回后,栈会清空,所以引用变量会被清空掉,这是堆上的对象,如果没有其他的引用变量引用它,就会被Gc在某个合适的时候gc掉。

上面说的就是栈和堆的作用在程序执行过程中。更深的理解,还需你在工作学习中不断去用它们才能体会得到。纯手打,希望可以帮到你,谢谢采纳。谢谢“若amp惜”

堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

主要看作用就知道了。

另外还有一位高手,“龙v站”的博客,有更加深入的关于JVM中,堆、栈、方法区的介绍,

太经典了!

链接:http://www.cnblogs.com/kkcheng/archive/2011/02/25/1964521.html

堆与栈 java_JAVA中堆和栈的区别 - 勇往直前路飞桑的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...相关推荐

  1. php show函数,PHP中的常用MYSQL函数 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    1.mysql_connect()-建立数据库连接51Testing软件测试网6\p A4B4F$f 格式:M-k0u-u4t+J K0 resource mysql_connect([string ...

  2. linux中的伪终端编程,Linux中的伪终端编程 - 残剑_飞雪的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    如何操作伪终端: 伪终端的使用是成对出现的,分为master 和 slaver 主设备:/dev/ptmx (i850上的主设备名) 从设备:动态生成:/dev/pts/0.......x 功能:写入 ...

  3. c语言内存池中 二维数组,C语言内存池使用模型-2 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    51Testing软件测试网A(@B-BHcSd4l 五.内存池管理内存机制(单链表管理结构)51Testing软件测试网!d"ZpnNr3K8IM;jsx51Testing软件测试网!dB ...

  4. 堆和栈区别 java_JAVA中堆和栈的区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  5. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  6. java堆和客栈_java中堆和栈的区别分析

    堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  7. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

  8. python什么是堆什么是栈_python中堆和栈_Python小知识00002

    原博文 2019-05-15 09:48 − 变量位于栈 对象位于堆 ... 0 739 相关推荐 2019-12-03 17:11 − 目录 Python 全栈之路 一. Python 1. Pyt ...

  9. java内存堆和栈_java中堆,栈主要区别及内存存储

    java堆.栈.堆栈的区别 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度 ...

  10. java 内存堆和栈_java中堆内存与栈内存的知识点总结

    一.概述 在Java中,内存分为两种,一种是栈内存,另一种就是堆内存. 二.堆内存 1.什么是堆内存? 堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者 ...

最新文章

  1. Apache MINA 2.0 用户指南
  2. 在 ASP.NET 中实现会话状态的基础
  3. 【Python科学计算系列】矩阵
  4. python练习题-day25
  5. linux查看java版本_linux 查看java版本
  6. Chrome 打包扩展程序
  7. 执行maven打包命令mvn package前maven会默认执行test命令的解决方法
  8. 柠檬桉叶油和deet_秋蚊子更毒,化学博士评测驱蚊止痒产品,为宝宝选出最好用的3款...
  9. manjaro 配置 独立显卡驱动
  10. 驱动开发笔记3—SSDT表详解
  11. 基于go语言搭建高性能IM系统
  12. SharePoint 2010 Webpart 部署 报错的解决方法
  13. mysql 创建外部表_Greenplum
  14. android图片做平移动画,Android中用Matrix实现ImageView里的图片平移和缩放动画
  15. Linux提示 /usr/bin/ld:cannot find-lxxx 系列解决方法
  16. 冗余系统研究:智能汽车的最后安全防线
  17. ReentrantLock源码分析
  18. pkuseg,LTP,jieba分词实践
  19. 爬虫日常-selenium登录12306,绕过验证
  20. SCOM2019创建性能视图

热门文章

  1. 采购经理人指数(PMI)
  2. JS一些常用证件信息的正则表达式
  3. 如何区分网线是几类的_如何判断网线是几类线?
  4. Python添加flac文件标签并实现wav转flac
  5. Vue Router 路由(路由守卫)---route
  6. 遗传算法java(中国外运杯)
  7. Teamviewer Install
  8. Gradle - 简介
  9. 达梦数据库创建公共同义词和私有同义词
  10. 如何给pdf添加目录