关闭

【java基础】Stack Memory VS Heap Memory

标签: jvm
358人阅读 评论(0) 收藏 举报
分类:

这篇文章是自己总结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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50773次
    • 积分:1612
    • 等级:
    • 排名:千里之外
    • 原创:105篇
    • 转载:14篇
    • 译文:5篇
    • 评论:9条
    最新评论