重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关Java中内存分配的情况有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为中江企业提供专业的成都网站建设、网站设计,中江网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。Java内存五大区
栈:用于保存函数内部的局部变量,函数形参,一旦超出作用域,就删除
堆:凡是new出来的东西都是存放在堆里,也可以说可变对象(非基本数据类型)都是保存在这里面。
堆里面的东西,都有一个内存(16进制),栈中存放的就是这个16进制的内存值。
堆里面存放的东西都用默认值:
整数:默认值0
浮点数:默认0.0
布尔:默认false
字符:默认'\u0000‘
引用:默认null
本地方法栈:与操作系统有关
方法区:存储.class相关信息,包含方法的信息
寄存器:与CPU相关
堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用(堆栈分离的好处:))。
为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况——长度固定,因此栈中存储就够了,如果把他存在堆中是没有什么意义的(还会浪费空间,后面说明)。可以这么说,基本类型和对象的引用都是存放在栈中,而且都是几个字节的一个数,因此在程序运行时,他们的处理方式是统一的。
引用数据类型因为大小不固定,所以会存在堆内存中,栈内存中存的是堆内存的地址,每次读取值时,先找到栈内存中的内存地址,在通过内存地址,找到在堆内存中的对应的对象。
栈内存和堆内存的关系图示
堆:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。分配的速度较慢,地址不连续,容易碎片化。此外,由程序员申请,同时也必须由程序员负责销毁,否则则导致内存泄露。
栈:由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。注意,const局部变量也储存在栈区内,栈区向地址减小的方向增长。
内存泄漏:我们申请了一块内存空间,在使用完后,没有即使释放。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。
内存泄漏解决办法:良好的编码习惯,使用了内存分配的函数,一旦使用完毕,要记得要使用其相应的函数释放掉。malloc和delete搭配使用,new和free搭配使用
调用对象,内存分配情况
调用两个对象,内存分配情况
对象作为返回值
static变量
继承
以上就是Java中内存分配的情况有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联网站建设公司行业资讯频道。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。