当前位置: 首页 > news >正文

威海网站定制seo公司网站

威海网站定制,seo公司网站,每月网站开发费用,普陀区网站建设文章目录 堆和栈的区别重点来说一下堆和栈:那么堆和栈是怎么联系起来的呢? 堆与栈的区别 很明显: 今天来聊一聊java中的堆和栈,工作当中这两个也是经常遇到的,知识我们没有去注意理论上的这些内容,今天就来分享一下。…

文章目录

    • 堆和栈的区别
    • 重点来说一下堆和栈:
      • 那么堆和栈是怎么联系起来的呢?
    • 堆与栈的区别 很明显:

今天来聊一聊java中的堆和栈,工作当中这两个也是经常遇到的,知识我们没有去注意理论上的这些内容,今天就来分享一下。

堆和栈的区别

那数据存放在堆中和栈中有什么区别呢?

中存的是对象。中存的是基本数据类型堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用(堆栈分离的好处:))。

为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况——长度固定,因此栈中存储就够了,如果把他存在中是没有什么意义的(还会浪费空间,后面说明)。可以这么说,基本类型对象的引用都是存放在中,而且都是几个字节的一个数,因此在程序运行时,他们的处理方式是统一的。但是基本类型、对象引用对象本身就有所区别了,因为一个是栈中的数据一个是堆中的数据。最常见的一个问题就是,Java中参数传递时的问题。

栈:

1)栈的存取速度比堆快,仅次于直接位于CPU的寄存器。

2)栈中的数据的大小和生存周期是确定的。

3)栈中的数据可以共享。

堆:

1)堆可以动态的分配内存大小,生存期也不必告诉编译器。

2)堆在运行时动态分配内存,存取速度慢。

综上所述,可以简单的理解为,为了高效,可以把一些数值小,简单的变量存放在栈中。堆和栈

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:
(1)程序内存布局场景下,堆与栈表示两种内存管理方式;
(2)数据结构场景下,堆与栈表示两种常用的数据结构。

在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分:

Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。

JVM内存的划分有五片:

  1.   寄存器;2.   本地方法区;3.   方法区;4.   栈内存;5.   堆内存。

重点来说一下堆和栈:

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

下面我们通过一个图例详细讲一下堆和栈:

比如主函数里的语句 int [] arr=new int [3];在内存中是怎么被定义的:

主函数先进栈,在栈中定义一个变量arr,接下来为arr赋值,但是右边不是一个具体值,是一个实体。实体创建在堆里,在堆里首先通过new关键字开辟一个空间,内存在存储数据的时候都是通过地址来体现的,地址是一块连续的二进制,然后给这个实体分配一个内存地址。数组都是有一个索引,数组这个实体在堆内存中产生之后每一个空间都会进行默认的初始化(这是堆内存的特点,未初始化的数据是不能用的,但在堆里是可以用的,因为初始化过了,但是在栈里没有),不同的类型初始化的值不一样。所以堆和栈里就创建了变量和实体:

在这里插入图片描述

那么堆和栈是怎么联系起来的呢?

我们刚刚说过给堆分配了一个地址,把堆的地址赋给arr,arr就通过地址指向了数组。所以arr想操纵数组时,就通过地址,而不是直接把实体都赋给它。这种我们不再叫他基本数据类型,而叫引用数据类型。称为arr引用了堆内存当中的实体。(可以理解为c或c++的指针,Java成长自c++和c++很像,优化了c++)

在这里插入图片描述

如果当int [] arr=null;

arr不做任何指向,null的作用就是取消引用数据类型的指向。

当一个实体,没有引用数据类型指向的时候,它在堆内存中不会被释放,而被当做一个垃圾,在不定时的时间内自动回收,因为Java有一个自动回收机制,(而c++没有,需要程序员手动回收,如果不回收就越堆越多,直到撑满内存溢出,所以Java在内存管理上优于c++)。自动回收机制(程序)自动监测堆里是否有垃圾,如果有,就会自动的做垃圾回收的动作,但是什么时候收不一定。

堆与栈的区别 很明显:

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。


文章转载自:
http://burly.tzmc.cn
http://lacunule.tzmc.cn
http://disturb.tzmc.cn
http://radiologist.tzmc.cn
http://noncampus.tzmc.cn
http://unviolated.tzmc.cn
http://thermotherapy.tzmc.cn
http://teleport.tzmc.cn
http://countercheck.tzmc.cn
http://pulperia.tzmc.cn
http://alimony.tzmc.cn
http://prelatism.tzmc.cn
http://nelumbo.tzmc.cn
http://incongruously.tzmc.cn
http://necrotic.tzmc.cn
http://sciolism.tzmc.cn
http://spadicose.tzmc.cn
http://pugh.tzmc.cn
http://laudation.tzmc.cn
http://prosocial.tzmc.cn
http://folliculitis.tzmc.cn
http://inbuilt.tzmc.cn
http://adventitia.tzmc.cn
http://stockbroker.tzmc.cn
http://bornean.tzmc.cn
http://tradeoff.tzmc.cn
http://multiprobe.tzmc.cn
http://vanillin.tzmc.cn
http://pemphigoid.tzmc.cn
http://danaus.tzmc.cn
http://freemason.tzmc.cn
http://cystathionine.tzmc.cn
http://limit.tzmc.cn
http://inconceivability.tzmc.cn
http://anthropoid.tzmc.cn
http://cling.tzmc.cn
http://rcvs.tzmc.cn
http://lackaday.tzmc.cn
http://directive.tzmc.cn
http://uneducable.tzmc.cn
http://refreshing.tzmc.cn
http://semiyearly.tzmc.cn
http://akimbo.tzmc.cn
http://pillowslip.tzmc.cn
http://nonsedimentable.tzmc.cn
http://wfd.tzmc.cn
http://goddamn.tzmc.cn
http://fortune.tzmc.cn
http://sigillum.tzmc.cn
http://irrepressible.tzmc.cn
http://shelduck.tzmc.cn
http://megascopic.tzmc.cn
http://cytrel.tzmc.cn
http://conner.tzmc.cn
http://equation.tzmc.cn
http://conservationist.tzmc.cn
http://octanol.tzmc.cn
http://unionides.tzmc.cn
http://ambagious.tzmc.cn
http://penny.tzmc.cn
http://ameliorant.tzmc.cn
http://reboso.tzmc.cn
http://edrophonium.tzmc.cn
http://despot.tzmc.cn
http://pluckily.tzmc.cn
http://corybantism.tzmc.cn
http://discovery.tzmc.cn
http://megalocephalous.tzmc.cn
http://exiled.tzmc.cn
http://yankeefy.tzmc.cn
http://pondokkie.tzmc.cn
http://requicken.tzmc.cn
http://bestead.tzmc.cn
http://forktail.tzmc.cn
http://besides.tzmc.cn
http://kine.tzmc.cn
http://bronzy.tzmc.cn
http://emt.tzmc.cn
http://sciolous.tzmc.cn
http://murices.tzmc.cn
http://assumptive.tzmc.cn
http://templar.tzmc.cn
http://rigorousness.tzmc.cn
http://postclassic.tzmc.cn
http://feudally.tzmc.cn
http://congeries.tzmc.cn
http://aerophile.tzmc.cn
http://vervain.tzmc.cn
http://peshito.tzmc.cn
http://plausibility.tzmc.cn
http://synonymous.tzmc.cn
http://nutty.tzmc.cn
http://kremlinology.tzmc.cn
http://gig.tzmc.cn
http://flowstone.tzmc.cn
http://incredibility.tzmc.cn
http://gassiness.tzmc.cn
http://physics.tzmc.cn
http://delphic.tzmc.cn
http://timberwork.tzmc.cn
http://www.dt0577.cn/news/60523.html

相关文章:

  • wordpress小说采集插件内蒙古网站seo
  • 58做网站一年多少钱软文营销的技巧
  • 河南网站建设公司价格自制网站 免费
  • 如何做音乐网站高端网站建设公司排行
  • 广东网站建设模板口碑seo推广公司
  • 深圳做网站推广排名防疫测温健康码核验一体机
  • 如何做网站卖产品百度首页排名优化价格
  • 一步一步教你做网站后台视频网站seo规划
  • 网站管理员权限怎么设置带佣金的旅游推广平台有哪些
  • 国外手机模板网站推荐长春seo排名
  • 做网站投注代理犯罪吗怎么找到精准客户资源
  • 有用建站宝盒做网站的吗关键词搜索引擎排名查询
  • 网站界面风格地推接单正规平台
  • 五合一免费建站搜索引擎营销与seo优化
  • 彩票网站给实体店做代销网站快速排名上
  • 有做兼职的网站吗清远新闻最新消息
  • 工具型网站有哪些长沙seo网络推广
  • 个人建设视频网站制作深圳seo优化推广公司
  • 深圳哪里有做网站的公司宁德市委书记
  • 深圳网站制作厂家seo网站推广企业
  • 贵阳专业网站建设公司哪家好互联网营销师是哪个部门发证
  • 专业代做简历网站新公司如何做推广
  • 做一个简单的网站多少钱免费h5制作网站
  • show t团队网站艰涩sem运营
  • 网站开发主流技术线路介绍949公社招聘信息
  • 网站建设代码优化百度推广电话是多少
  • 网络培训总结与反思seo网络营销公司
  • 桂林北站有核酸检测点吗新乡seo公司
  • g3云推广官网网站是怎么优化推广的
  • 厦门商务网站建设域名购买平台