【java基础】Stack Memory VS Heap Memory

原创 2016年06月01日 23:20:03

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java的堆内存与栈内存的异同(Heap memory vs Stack memory)

Java Heap Memory堆内存会在Java运行时分配给对象(Object)或者JRE类。每当我们创建一个对象的时候,在对内存中就会分配一块储存空间给这个对象。Java的垃圾回收机制就是运行在堆...

Java堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

–引用 (http://www.cnblogs.com/xltcjylove/p/4502859.html) LZ今天在看到Java类和对象、数据类型和数据传递部分内容时,发现越往底层看,越发现...

数据结构复习笔记(Data Structures & Algorithms in Java, 4th) --Memory Management (Heap & Stack)

这篇文章主要是学习Java虚拟机(JVM)内存管理的基础,学习内存管理所需要使用的几个数据结构 (Stack, Heap)。...

Block(五)heap-stack-memory

简要介绍iOS中的内存分配区间概念,以及block在内存中的位置。

堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出

简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 一...

堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出

简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 一...

Java Heap Memory vs Stack Memory Difference(java Heap与Stack的区别)

原文:http://www.journaldev.com/4098/java-heap-memory-vs-stack-memory-difference       之前我写了一些关于java垃...

java.lang.IllegalArgumentException: System memory ... must be at least ... Please use a larger heap

java.lang.IllegalArgumentException: System memory 259522560 must be at least 4.718592E8. Please use ...

关于 java Heap Memory 你要知道的10点

原文:10 points about Java Heap Space or Java Heap Memory Read more: http://javarevisited.blogspot.c...
  • dtnqy
  • dtnqy
  • 2014年04月29日 11:44
  • 908

Memory Analyzer Tool定位Java heap space内存泄漏

java heap space是一个很蛋疼的问题,如果开发调试时遇到还好,如果是在项目上线后运行一段时间后,才抛出该异常,那真的很悲剧(那你得找代码中到底是哪里内存泄露了),这真是一个悲伤的故事。  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【java基础】Stack Memory VS Heap Memory
举报原因:
原因补充:

(最多只允许输入30个字)