美文网首页
堆,栈和GC详解

堆,栈和GC详解

作者: 小明同学呀呀呀 | 来源:发表于2019-06-13 21:53 被阅读0次

1、栈(stack)是存放方法的局部变量的内存空间,每个方法都会分配一块内存空间frame,方法一旦执行完成,frame就被销毁,对于原始类型,变量的值也保存在stack中,对于引用类型,stack里保存的是指向对象的内存地址(引用)

</br>

2、堆(heap)是存放的Object,java是传值的,不是传引用的。

</br>

3、垃圾回收器GC(Garbage Collection):

局部变量方法在执行完后内存马上被回收。

Heap里面的对象由GC自动回收。

GC维护和检测对象的引用,当引用数为0时自动回收。

GC并不是实时回收的。

以下面的程序为例来说明jvm内存中的Stack,Heap和GC(垃圾回收):

第一步:在程序未执行时的堆栈如下图

第二步:开始执行main()方法,首先jvm会先为main方法分配一段内存空间,内存又依次为rate,money,zhangsan开辟空间,因为zhangsan是引用数据类型,所以jvm会在Heap中创建对象,分配一段内存空间,Stack中的zhangsan指向Heap中为zhangsan这个对象的内存地址

第三步:接着执行task1,jvm为task1方法分配内存空间,task1中有两个变量rate和hour,jvm会从main的内存中将rate的的值传递过来,同时为hour分配空间,如下图

第四步:task1执行完,jvm会自动释放内存,task1的内存块将不存在

接下来将执行task2,传递一个person进来,jvm会给person和hour分配内存空间,person同样指向heap中的内存空间,它是main方法中zhangsan的引用

最后,task2执行完后,jvm自动回收task2的内存空间,接着回收main函数的内存空间,然后没有任何对象指向Heap中的zhangsan,jvm就会回收Heap中的zhangsan对象的内存空间

下回补充 静态区知识(也就是带和不带static的区别)。

作者:佛祖

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

  • 堆,栈和GC详解

    1、栈(stack)是存放方法的局部变量的内存空间,每个方法都会分配一块内存空间frame,方法一旦执行完成,fr...

  • java面试题(一)

    1、System.gc()一定能够保证执行吗? 不能。 2、java中堆和栈的区别? jvm中堆和栈属于不同的内存...

  • C#小笔记之堆和栈(GC)

    我们把内存分为堆空间和栈空间 栈空间比较小,但是读取速度快 堆空间比较大,但是读取速度慢 GC Garbage C...

  • JVM——JVM运行时堆内存详解

    前言 今天就来介绍一下JVM运行时堆内存详解。 JVM运行时堆内存详解 Java 堆从 GC 的角度还可以细分为:...

  • Java 堆/栈 GC相关

    一、Java程序运行时的内存分配策略 静态分配[静态存储区]/栈分配[栈区]/堆分配[堆区] 1)静态存储区...

  • JAVA与JVM

    JVM(JAVA虚拟机) 虚拟机分为栈和堆: 堆:回收:堆是由GC来负责回收的。存储类型:主要存储对象、静态成员变...

  • JVM相关知识点

    1、java中的内存模型 gc内存模型:主要包括栈、堆、程序计数器,其中栈和程序计数器是线程私有的 1)栈:虚拟机...

  • C#内存分配

    CLR内存分配分三大块区域:栈、GC堆、大对象堆。 一、线程堆栈(栈) 用于分配值类型实例。栈由操作系统进行管理,...

  • JVM内存模型及GC算法

    一、内存模型 程序计数器、Java虚拟机栈、本地方法栈 方法区、堆 二、GC算法

  • JVM内存详解--堆和栈

    JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成 1)堆 所有通过new创建的对象的内存都在堆中...

网友评论

      本文标题:堆,栈和GC详解

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