写一点Java中栈内存(Stack)和堆内存(Heap)的基础知识

一个Java程序运行时,程序一般会在内存中开辟一些空间供运行,其中分为栈内存和堆内存.
栈内存一般是线程独享的,存放的是一些简单的基本类型,以及方法,对象的地址等.
而堆内存的内容是全局的,存放大部分的引用类型和数据,他是全局共享的,比栈内存要大得多.
下面我们弄一段代码来演示演示—

package com.mydelo;

/**
 * @author Paul
 * @version 0.1
 * @date 2018/3/3 0003
 */
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
}

他们的内存图如图所示
`

这里写图片描述

栈内存采用了FILO先进后出的模式,程序先执行main方法,在栈内存中开辟了一块空间,将各个变量初始化并在堆内存中开辟对应的空间存储引用类型,当执行到foo方法时,再在main空间的上方开辟一个foo方法的空间,用于存放方法中的基本数据类型和引用类型的地址,执行完毕后从上往下释放空间.

猜你喜欢

转载自blog.csdn.net/sinat_21372989/article/details/79511624