【java基础】Stack Memory VS Heap Memory

这篇文章是自己总结JVM中Stack Memory与Heap Memory的区别,

1 Stack Memory解释

2 Heap Memory解释

heap memory主要是用来存储java程序创建的对象,例如new Object();此时,JVM会在heap memory分配一定的空间用来存储创建的Object对象.

JVM中的垃圾回收机制主要的工作就是释放heap memory中不被其他任何对象引用的对象(即不和其他任何对象建立关系的).

3 两者联系

以下面的代码为例,说明两者的关系:

public class Memory {

    public static void main(String[] args) { // Line 1
        int i=1; // Line 2
        Object obj = new Object(); // Line 3
        Memory mem = new Memory(); // Line 4
        mem.foo(obj); // Line 5
    } // Line 9

    private void foo(Object param) { // Line 6
        String str = param.toString();  Line 7
        System.out.println(str);
    } // Line 8

}

这里写图片描述

4 总结

  1. heap memory可以被应用中的所有部分使用,而Stack Memory只能被一个线程(thread)使用.

  2. 如果heap memory被使用完,系统会抛出OutOfMemoryError,而stack memory使用完会抛出StackOverFlowError.

  3. 如果一个对象被创建,它会被创建在heap memory, 而stack memory会保存一个创建对象的引用(类似C语言当中的指针)

  4. 创建在heap memory当中的对象,对于整个系统而言,都是可见的,然而,stack memory是不被其他线程所知的.

  5. stack memory在内存管理时,采用的先进先出(FIFO),而heap memory整个管理就比较复杂(分为young gc, old gc以及其他的).

  6. statck memory的生命周期比较短,而heap memory从应用启动到应用终止期间都会存在.

  7. stack memory比heap memory的空间要小很多,由于stack memory采用FIFO,所以,相比较heap memory,stack memory的执行速度比heap memory要快.

参考说明:
1. http://www.journaldev.com/4098/java-heap-space-vs-stack-memory

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值