java如何进行内存分配管理_java如何进行内存分配和管理

Java内存的分派与办理是Java的焦点手艺之一,一般涉及以下区域:

1.栈区:由编译器主动分派释放,存放函数的参数值、局部变量的值等。

2.堆区:由法式员分派释放, 若是法式员不释放,法式竣事时可能由OS收受接管 。

3.文字常量区:存放常量字符串,法式竣事后由系统释放 。

4.法式代码区 :存放代码。

5.全局区(静态区):全局变量和静态变量的存储在统一块区域,初始化的全局变量和静态变量在统一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

ca52dd0ec6056004178508b879c9d4c3.png

7841f7f92b4cf6f2c08d3ea5982a789c.png

东西/原料Java

方式/步调1

1.栈

是在函数中界说的一些根基类型的变量数据,还有对象的引用变量都在函数的栈内存平分配。当在一段代码中界说一个变量时,Java就在栈中为这个变量分派内存空间,当该变量退出该感化域后,java会主动释放失落为该变量分派的内存空间。栈内存是java法式的运行区,是在线程建立时建立的。它的生命周期跟从线程的生命周期,线程竣事栈内存也就释放。对于栈来说不存在垃圾收受接管的问题,只要线程竣事,该栈就竣事了。

0f369be1eb8fc75d7edc4065917babaa.png

2

2.堆

堆内存是用来存放由关头字new建立的对象和数组。在堆平分配的内存,由java虚拟机主动垃圾收集器来办理。在堆中建立一个对象后,还可以在栈中界说一个变量,让这个变量的值等于对象在堆内存中的首地址,栈中的变量就是对象的引用,半斤八两于java中的指针。当法式运行到对象地点的语句块之外,对象占有的内存不会主动释放,在没有引用变量指标的目的它时,随后一个不确定的时候被垃圾收集器收受接管失落。

09268cba0073d7789cfbbb8e8dc51bfc.png

3

3.常量池

常量池指的是在编译期被确定,并被保留在已编译的.class文件中的一些数据。除了包含代码中所界说的各类根基类型(int,long等)和对象型(string、数组等)的常量值(final),还包含一些以文本形式呈现的符号引用。在法式执行时,常量池会存储在MethodArea(方式区)中,而不是堆中。一个java虚拟机实例只存在一个堆内存,堆内存的巨细是可以调节的,类加载器读取了类文件后,需要把类、方式、常变量(const润色的变量)放到堆内存中,堆内存分为三部门:永远存储区、新生区、老年区。

4444cd6e06411456815f9a9262a7bd5e.png

4

4.栈和堆的合作

栈的优势是存取速度比堆快,仅次于寄放器,错误谬误是栈中的数据巨细与保存期必需是确定的,缺乏矫捷性。栈中存放一些根基类型的变量数据和对象引用。堆是一个运行时数据区,类的对象从平分配空间,堆的优势是可以动态地分派内存巨细,保存期不必事先告诉编译器,错误谬误是因为在运行时动态分派内存,存取速度慢。

b41a92cfc851b8b79e7343668fd7da9b.png

5

5.运行时的数据区域

所有线程共享方式区和堆;虚拟机栈、当地方式栈和法式计数器是线程隔离的数据区。 法式计数器、 Java的虚拟机栈、Java堆、方式区、运行时常量池。

d38f88da32e97d905012eadf996fd514.png

分派方式1

慢速分派

576542a5e057908ea429a4eda72d7074.png

2

快速分派

aa73bc9cb93a5b4a5e7b50de39e431d1.png

注重事项栈区代表处置逻辑,而堆代表数据。两者分隔,使得处置逻辑更为清楚,表现了模块化的思惟。使堆中的内容可以被多个虚拟机栈共享,节流空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值