写一点Java中栈内存(Stack)和堆内存(Heap)的基础知识
2018-03-10 21:01
267 查看
一个Java程序运行时,程序一般会在内存中开辟一些空间供运行,其中分为栈内存和堆内存.
栈内存一般是线程独享的,存放的是一些简单的基本类型,以及方法,对象的地址等.
而堆内存的内容是全局的,存放大部分的引用类型和数据,他是全局共享的,比栈内存要大得多.
下面我们弄一段代码来演示演示—
他们的内存图如图所示
`
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/03/4e80db9cb15ea3896c079d5570e91d94)
栈内存采用了FILO先进后出的模式,程序先执行main方法,在栈内存中开辟了一块空间,将各个变量初始化并在堆内存中开辟对应的空间存储引用类型,当执行到foo方法时,再在main空间的上方开辟一个foo方法的空间,用于存放方法中的基本数据类型和引用类型的地址,执行完毕后从上往下释放空间.
栈内存一般是线程独享的,存放的是一些简单的基本类型,以及方法,对象的地址等.
而堆内存的内容是全局的,存放大部分的引用类型和数据,他是全局共享的,比栈内存要大得多.
下面我们弄一段代码来演示演示—
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方法的空间,用于存放方法中的基本数据类型和引用类型的地址,执行完毕后从上往下释放空间.
相关文章推荐
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
- java基础之对象的引用和引用的对象、equals和==的区别,栈内存和堆内存的存储区别
- Java之堆内存(Heap)与栈内存(Stack)
- java基础知识---每天进步一点
- java基础回顾(五)——Stack、Heap
- Java的堆内存与栈内存的异同(Heap memory vs Stack memory)
- Java基础之堆内存与栈内存
- Java最最最基础知识汇总(想到一点更新一点哈,不是一次更完)
- 【java基础】Stack Memory VS Heap Memory
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
- java基础知识:栈内存和堆内存
- Java学习笔记一(基础知识)
- Java并发和多线程(一)基础知识
- Java基础知识强化之集合框架笔记43:Set集合之TreeSet存储Integer类型的元素并遍历
- Java基础知识IO流(文本文件读取方式二)
- Java基础知识总结(八)——反射
- java学习--基础知识
- Java基础知识之注解Annotation
- JAVA基础知识再学习(1)静态代码块
- java基础知识(一)数据类型默认值