美文网首页
J2SE:小议堆(heap)和栈(stack)

J2SE:小议堆(heap)和栈(stack)

作者: 尼古拉斯_富貴 | 来源:发表于2017-07-28 15:58 被阅读0次

    以前的面试中偶尔会被问起这个,当时回答的也是支支吾吾。有点惭愧,so,今天来认真学习一番。

    栈:(运行时单位)

    一些基本类型的变量对象的引用都是保存在栈中,当变量或者对象的引用出了作用域就会自动释放。

    {                           
         int a = 99;            
    }                           
    
    

    以上代码中,定义了一个int型变量a并给它赋初值,大括号范围内为a的作用域,当代码运行完该段作用域后,会自动释放掉为a分配的内存空间。

    堆:(存储时单位)

    通过new XXX()方式创建的对象保存在堆中(字符串常量、基本数据类型常量保存在常量池中

    {                           
         Music myMusic = new Music();            
    }                           
    
    

    以上代码会同时分配两块内存,对象引用myMusic保存在栈中,对象Music保存在堆中。

    当程序运行完new Music()的代码后,该段代码的作用域就已经结束了,但是该对象仍然占据着内存,在随后的一个不确定的时候被垃圾回收器回收掉。

    补充

    如果栈内存不够,JVM会抛出java.lang.StackOverFlowError。
    而如果是堆内存不够,JVM会抛出java.lang.OutOfMemoryError。

    相关文章

      网友评论

          本文标题:J2SE:小议堆(heap)和栈(stack)

          本文链接:https://www.haomeiwen.com/subject/ketflxtx.html