一、基本了解

java的数据类型分为两种:基本类型和引用类型。基本类型的变量保存的是原始值,引用类型的变量保存的是引用值。引用值代表某个对象的引用,而不是对象本身,对象本身放在这个引用值所表示的地址的位置。

二、堆与栈

三、详细说明

栈是运行时的单位,堆是存储的单位

栈解决的程序运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储问题,即就是数据如何放、放哪儿

在java中一个线程就会相应有一个线程栈与之对应,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。堆是所有线程共享的。栈因为是运行单位。因此里面存储的是和当前线程相关的数据。包括局部变量、程序运行状态、方法返回值等;而堆只负责存储对象信息。

为什么要将堆和栈分开,栈不是也可以存储数据吗?

1、从软件设计角度分析,栈代表了处理逻辑,堆代表了数据,这样分开,使得处理逻辑更清晰。分而治之的思想,这种隔离、模块化的思想体现在软件中的很多地方。

2、堆和栈的分离,使得堆的内容可以被多个栈共享(即多个线程访问同一个对象)。这种共享的收益很多,这种共享提供了一种有效的数据交互方式(共享内存),另一方面,堆中共享的常量和缓存可以被所有栈访问,节省了内存。

3、栈因为运行是需要,比如保存系统运行的上下文,需要地址段的划分,由于栈只能向上增长,因此限制住栈存储内容的能力,而堆是根据需要可以动态增长的,因此栈和堆的拆分,使得堆动态增长成为可能,相应栈只需要记住堆中的一个地址即可。

4、面向对象就是堆和栈的完美结合。其实,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。但是,面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的思考。当我们把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中。我们在编写对象的时候,其实即编写了数据结构,也编写的处理数据的逻辑。不得不承认,面向对象的设计,确实很美

在java中,main函数是栈的起始点,也是程序的起始点。

堆中存什么,栈中存什么?

堆中存的是对象,栈中存的是基本数据类型和堆中对象的引用,一个对象的大小不可以估计,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4byte引用

对象,从某种意义上说,是由基本类型组成的。可以把一个对象看作为一棵树,对象的属性如果还是对象,则还是一颗树(即非叶子节点),基本类型则为树的叶子节点。程序参数传递时,被传递的值本身都是不能进行修改的,但是,如果这个值是一个非叶子节点(即一个对象引用),则可以修改这个节点下面的所有内容。
堆和栈中,栈是程序运行最根本的东西。程序运行可以没有堆,但是不能没有栈。而堆是为栈进行数据存储服务,说白了堆就是一块共享的内存。不过,正是因为堆和栈的分离的思想,才使得Java的垃圾回收成为可能。

Java中,栈的大小通过-Xss来设置,当栈中存储数据比较多时,需要适当调大这个值,否则会出现java.lang.StackOverflowError异常。常见的出现这个异常的是无法返回的递归,因为此时栈中保存的信息都是方法返回的记录点

最新文章

  1. Lintcode 82.落单的数
  2. Java 程序员必须掌握的 Linux 命令(转:导师Jencks)
  3. (原创)JAVA多线程二线程池
  4. C++程序设计——知识点总结
  5. Django根据现有数据库建立model
  6. 记一次MongoDB Map&Reduce入门操作
  7. python处理经过gzip压缩的网页内容
  8. WPF循环加载图片导致内存溢出的解决办法
  9. java-首字母大小写
  10. NYOJ926(概率)
  11. Android -- 打开某个指定的网站
  12. Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
  13. AngularJS的一点学习笔记
  14. 头像上传功能实现,PC端的需要做兼容
  15. ICDM 2007
  16. svn add后的数据如何取消-svn revert??--zz
  17. EventBusException:xxxx has no methods onEvent
  18. 安装ArcGIS License 10.1 许可管理器 破解版 服务启动又失败的解决办法
  19. 团队作业4——第一次项目冲刺(Alpha版本)4.26
  20. 服务管理之rsync

热门文章

  1. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
  2. 中性SNP的突变年龄评估(estimate the average age of a neutral two-allele polymorphism)
  3. snpeff注释变异(variants)
  4. RPC简介
  5. asp一句话
  6. Java_异常处理误区
  7. Yarn常用命令总结
  8. mysql 快速生成删除数据库中所有的表的语句
  9. Java NIO系列教程(八)JDK AIO编程
  10. JAVA核心技术I---JAVA基础知识(不可变对象和字符串)