? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 浅谈堆栈的区别

? ? ? ? ? ?堆栈在计算机中是两种不同的数据结构:堆是队列优先,先进先出(FIFO);栈是先进后出(LIFO)的;

class="title-text" style="margin-bottom: 0px; font-size: 18px; color: #333333; font-weight: 400;">堆栈空间分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆栈缓存方式

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

堆栈数据结构区别

堆(数据结构):堆可以被看成是一棵树,如:堆排序。

栈(数据结构):一种先进后出的数据结构。

在java中

? ? ?? java是一种自动分配内存和垃圾回收的语言,这一切都是在 jvm中进行的自动操作;java的设计者将jvm的内存结构划分为多个不同的内存区,每一个内存区都拥有各自的用途,都会负责储存各自的数据类型;

? ? ? ?JVM的内存分区如下图:

java 堆区:

? ? ??是内存回收的主要区域,主要存放的是对象和数组的实例;

方法区:

? ? ? ?方法区仅仅是逻辑上的独立,实际上还包含着唉java堆区中;里面存储每一个类的结构信息,比如:运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容以及类、实例、接口初始化时需要用到的特殊方法等数据;

?

运行时常量池:

? ? ? ?属于方法区中的一部分,运行时常量池就是字节码文件中常量池表的运行时表示形态;

?

java栈区 :

? ? ? ?存储的是局部变量、对象引用和returnAddress类型;

?

PC寄存器:

? ? ? 是对物理 PC寄存器的一种抽象模拟,是线程私有的,生命周期与线程的生命周期保持一致;如果当前线程所执行的方法是一个java方法,那么PC寄存器就会存储正在执行的字节码的指令地址,如果是native方法,PC寄存器的值就为空;

?

本地方法栈:

? ? ? 用于支持本地方法的执行;

大小: 21.7 KB

查看图片附件

堆栈区别java总结_堆栈的区别相关推荐

  1. C语言与Java标识符的区别,Java和C语言的区别

    学过编程的都知道Java和C语言,它们两者之间有什么区别呢?下面小编带你去了解一下. 1.基本区别 C语言是全面向过程,Java是面向对象的 JAVA是可以跨平台的.而C语言不能,但能够直接操作硬件, ...

  2. python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  3. python堆栈溢出的原因_堆栈溢出一般是什么原因?

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  4. python堆栈溢出的原因_堆栈溢出一般是什么原因

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  5. 堆栈区别java总结_java 堆栈的区分,区别

    为了直观,直接通过代码演示: 堆栈划分图: 堆栈区别: 基于上边的解释我们可以很简单的总结出堆和栈的区别: 1.应用程序所有的部分都使用堆内存,然后栈内存通过一个线程运行来使用. 2.不论对象什么时候 ...

  6. java和python的web自动化有什么区别-Java 和 Python 有哪些区别?

    区别 一.python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库. 二.python是全动态性的,可以在运行时自己修改自己的代码,j ...

  7. php集合与数组的区别,java集合与数组的区别

    数组 数组是java语言内置的数据类型,他是一个线性的序列,所有可以快速访问其他的元素,数组和其他语言不同.(推荐学习:java课程) 当你创建了一个数组时,他的容量是不变的,而且在生命周期也是不能改 ...

  8. java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...

    JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区 JDK,JRE,JVM这三者的联系与区别///java跨平台///堆.栈.常量区.静态区.方法区的区别 ---复习day ...

  9. JAVA里面的堆栈区别

    一.内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们 ...

最新文章

  1. 新的Mac下如何配置开发者账号信息
  2. Spark RDD在Spark中的地位和作用如何?
  3. Visual Studio 安装OpenCV及问题总结
  4. 小户型吊顶的注意事项有哪些
  5. 代码整洁之道 垃圾编码收集
  6. exchange2003 SMTP连接器的应用案例
  7. 如何查询Windows XP 系统是多少位的
  8. WPS无法保存——以下内容无法保存在未启用宏的文档中.vb工程
  9. 多语言id1033,2052
  10. sqlite 中函数--nullif()、ifnull()、strftime()及时间格式函数
  11. Android 实现一个计时器
  12. UltraEdit的安装与破解
  13. WLAN没有有效的IP配置如何一招解决
  14. tracker_kcf环境配置
  15. java 导出mdb文件_Java生成mdb文件[MS Access文件](转载)
  16. “程序猿”随笔之武汉龟山印象
  17. 涨姿势|小众建模软件Make human,MakeClothes插件使用详解教程(2)
  18. Java性能 - Java Programming Guidelines
  19. 项目管理软件哪个好?项目管理软件有哪些功能?
  20. 虚拟创业云|BBC幼儿英语启蒙动画Feeling Better让孩子学会做情绪的主人全25集

热门文章

  1. #今日论文推荐#《自然·医学》:不受控制的暴饮暴食,有望被脑电刺激治好
  2. 中国婴幼儿用品连锁市场运营模式与投资潜力分析报告2022年版
  3. android 沉浸状态栏 之全局沉浸图片沉浸 webView
  4. TeamView安装和配置说明
  5. Python 日期和时间处理方法
  6. Hadoop-hdfs 配置
  7. 宜昌一中2021高考成绩查询,宜昌一中2020年高考再创佳绩!这个成绩令人赞叹
  8. 【电气专业知识问答】问:高压配电装置特殊天气下的检查项目有哪些?
  9. rabbitmq配置证书
  10. HashMap红黑树原理及源码分析---图形、注释一应俱全