美文网首页
java基础01-堆与栈:对象与方法的生存空间

java基础01-堆与栈:对象与方法的生存空间

作者: RocheLimit007 | 来源:发表于2020-02-17 22:19 被阅读0次

1 栈

1.1 什么是栈?

它是在运行java程序时,java虚拟机从计算机内存中申请的一块空间,这块空间的结构就好像一种特殊的队列,遵循着后进先出的原则。你可以将它想象成一个放置乒乓球的圆柱形球筒。当你往里面放置乒乓球,装满之后在往外取,最后放进去的球,通常被最先取出来。这就叫后进先出。

1.2 什么东西放在栈里?

局部变量,方法调用

1.3 放在栈里的东西是如何被消费的?

举个例子:当某段程序调用doStuff方法使得doStuff方法被放在最上方的栈块中,doStuff方法又调用了go方法,go就又被放在栈顶,go又调用了crazy方法,使得现在crazy被推至栈顶,当crazy执行完之后,它的栈块被释放掉,执行又回到go,以此类推,直到doStuff方法被执行完后,栈才被完全清空。

1.4 什么是局部变量?

声明在方法中变量,方法的参数。它们是暂时的,生命周期仅限于方法被放在栈上的这段时间。有一种特殊的局部变量,在方法中引用的实例对象,变量只保存对象的引用地址,真正对象生存在堆中。


2 堆

2.1 什么是堆?

与栈同样是java虚拟机在内存中取得的一块空间,这块空间的结构好像一颗树,与栈不同的是堆(heap)是用来存放对象的。

2.2 什么东西放在堆中?

实例对象,实例变量,因为实例对象包含实例变量,所以实例变量也等同于存在堆中。如果对对象在堆中如何分布感兴趣请看这篇

2.3 什么是实例对象?

实例对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;通俗的来讲,对象就是使用程序对现实存在的事物一种抽象的描述。例如:现实中有一条叫小花的狗,程序中的描述就是使用一个变量来引用这个被实例化出来的对象,这个对象的名字叫小花,年龄5岁,这就是小花这个对象的属性也叫实例变量。这个小花还有有跑,跳,吃,睡等行为,这就叫做对象的方法。

相关文章

  • java基础01-堆与栈:对象与方法的生存空间

    1 栈 1.1 什么是栈? 它是在运行java程序时,java虚拟机从计算机内存中申请的一块空间,这块空间的结构就...

  • 面试知识点总结

    Java基础知识 1、堆,栈,方法区 堆:JAVA堆在虚拟机启动时创建,用来存放由new创建的对象实例和数组。Ja...

  • 深入理解JVM-java内存划分以及对象新建

    1. Java内存区域划分 程序计数器 虚拟机栈 本地方法栈 Java堆 方法区 直接内存 2. 对象 对象的新建...

  • java 基础面试题

    一、java 堆与栈 1、Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通...

  • java内存区域

    先验知识 java堆、栈栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,J...

  • Java数据类型和存储的关系及String类型存储详述

    一.Java存储数据的地方:栈(stack)与堆(heap): 与C++不同,Java自动管理栈和堆,程序员不能直...

  • Java 工程师成神之路(2018 年修订版)

    基础篇 1.1 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别。 Java内存模型 内存可见性、重排...

  • 16-方法区

    一、栈、堆、方法区 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域 方法区在JVM启动...

  • java堆、栈、堆栈的区别

    1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆...

  • jvm笔记

    jvm内存区域 程序计数器 虚拟机栈 本地方法栈 java的堆 方法区 java如何访问对象 垃圾回收和内存分配

网友评论

      本文标题:java基础01-堆与栈:对象与方法的生存空间

      本文链接:https://www.haomeiwen.com/subject/gfzifhtx.html