自己谈谈对java堆和栈的理解

 

 最近看了几篇关于java堆和栈的区别的几个帖子。自己对这两个概念有了一定

了理解。
        其实java的堆和栈是一种内存资源。这里提到了内存资源,顺便说一

下其实java内存不仅仅是栈和堆。还有寄存器,常量池。
        java堆内存是一个运行时数据区域,可以动态分配内存的大小,生存

周期不必实现告诉编译器,存放对象和数组,优点是动态分配具有灵活性,缺

点是存取慢。
        java栈内存是一个数据可共享的区域,栈中数据的大小和生存周期是

确定的。栈中存放的一般是一些基本变量和对象句柄。缺乏灵活性,存取快。
        其实我感觉自己这两句话的总结应付一些面试题是没问题的。比如说

string str1=new  string(“fish”);new出的是对象,自然在堆。
string str2=“fish” 是一个变量的引用会存在栈中。所以很明显str1!

=str2。若str3=“fish”。他也是在栈中而且栈中数据共享所以str2==str3.再

说string str4= new  string(“fish”) ;虽然str4和str1都是创建对象在

堆中。但是我没说过堆中数据共享所以,所以他们只是值相同,但是str1!

=str4在字符串中equals方法我把他理解是比较数值是否相等。所以这样很好理

解这三个值都是一样的所以相等。
    说到str1!=str4,我想到一个问题就是因为他们是两个独立的对象,有各

自生命周期。所以他们生命周期是不确定的,因为运行调用而创建,不用而消

亡。所以会被GC自动回收(java的垃圾回收器)。所以堆中的数据可以通过GC

自动回收,如果不能回收,会可能出现内存溢出,一般内存溢出可能是短生命

周期的变量用长生命周期定义导致数据在内存不用,却占据内存资源,所以也

可以自己手动回收。
如果是new的对象,说明他的生命周期因为运行而生,不用而亡。说明这样可以

提高内存效率,不必总是霸占资源。所以现在我们可以知道string str=new

string(“”);比string str=“”;要好。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。 和方法区都是计算机内存的一部分,用于存储程序运行时所需要的数据。 是一种先进后出(Last In First Out,LIFO)的数据结构,它用于存储函数的调用过程中的临时数据,比如局部变量、函数的参数等。的特点是空间连续、大小固定、访问速度快。当一个函数被调用时,它的参数和局部变量会被压入中,当函数执行完毕后,这些数据会被弹出是一种可以动态分配空间的内存池,它的大小不固定,可以根据需要动态调整。主要用于存储程序运行时动态分配的数据,比如对象、数组等。的特点是空间不连续、大小不固定、访问速度比慢。当一个对象被创建时,它会被分配在中,并且它的引用会被存储在中。 方法区是一种用于存储类的元数据信息的内存区域,它主要用于存储类的常量池、方法信息、字段信息等。方法区的特点是空间大小固定、访问速度比慢。当一个类被加载到内存中时,它的元数据信息会被存储在方法区中。 下面举一个实例来说明和方法区的使用: ```java public class MemoryExample { public static void main(String[] args) { int x = 10; // x是一个局部变量,它被存储在中 Person p = new Person("Tom"); // p是一个对象引用,它被存储在中,而对象本身被存储在中 String s = "hello"; // s是一个字符串对象引用,它被存储在中,而字符串对象本身被存储在常量池中的方法区中 } } class Person { private String name; public Person(String name) { this.name = name; } } ``` 在这个例子中,变量x被存储在中,它的值是10。变量p是一个对象引用,它被存储在中,而对象本身被存储在中。变量s是一个字符串对象引用,它被存储在中,而字符串对象本身被存储在常量池中的方法区中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值