java练习21--内存(一)

一、内存概念

     内存主要分为栈、堆、方法区三部分。三者相互配合完成程序的执行和内存管理。

二、栈(Stack)

     栈通常用于存储方法调用的信息,包括局部变量、方法参数、返回地址等。每当一个方法被调用时,系统都会为该方法分配一个栈帧(Stack Frame)的内存区域,用于存储方法执行过程中的相关信息。当方法执行结束后,

     栈的特点和功能:

     1、先进后出:最后放入栈中的元素首先被移除。

     2、限制大小:栈的大小通常是固定的,当栈空间不足时可能会发现栈溢出的错误。栈的大小                                 通常由虚拟机在启动时确定。

     3、自动管理:栈的分配和释放是自动管理的。

     4、栈中的数据只在方法调用时有效。

三、堆(Heap)

      堆用于存储对象实例和数组等动态分配的内存。对重存储的对象实例和数组是通通过引用访问的,对象本身的引用存储在栈中。栈中的引用指向对堆中的对象,通过引用可以访问对象的属性和方法。

      堆的特点:

      1、动态分配:通过new关键字创建的对象都会被分配在堆上。

      2、大小可变:堆的大小通常是可变的。

      3、自动垃圾回收:由虚拟机根据需要进行动态分配和回收。

      4、生命周期:对象在堆上分配后,可以被多个方法使用,直到没有引用指向它时,才会被垃                                  圾回收。

四、方法区(Method Area)

      方法区用于存储类的结构信息、静态变量等,在java虚拟机启动时被创建。

      方法区的特点:

      1、存储类的数据:方法区存储每个类的结构信息,包括类的方法、父类、接口等。

      2、存储静态变量:方法区存储类的静态变量(使用static关键字声明的变量),这些变量在类                                       加载时被分配内存。

      3、存储常量:方法区存储了字符串、符号引用和一些特定常量(如final变量)。常量在编译期间生成。

五、三者示意图

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值