本篇學習棧內存基本知識,附上JAVA代碼
1
package com.howard.jvm;
2
/**
3
* JAVA的內存管理 (一) 棧內存
4
* Stack棧 棧內存 JAVA程序的運行區。 是在線程創建時創建,它的生命周期是跟隨線程的生命周期,線程結束棧內存也就釋放,對于棧來說不存在垃圾回收問題
5
* 只要線程一結束,該棧就Over。
6
* 棧中的數據都是以棧幀(Stack Frame)的格式存在,棧幀是一個內存區塊,是一個數據集,是一個有關方法(Method)和運行期數據的數據集,當一個方法
7
* A被調用時就產生了一個棧幀F1,并壓入到棧中,A方法又調用B方法,于是產生棧幀F2也被壓入棧,執行完畢后,先彈出F2棧幀,然后再彈出F1棧幀,遵循“
8
* 后進先出”的原則。
9
* 棧幀中主要保存3類數據:
10
* 1. 本地變量(local Variables),包括輸入參數和輸出參數以及方法內變量;
11
* 2. 棧操作(Operand Stack),記錄入棧和出棧操作;
12
* 3. 棧幀數據(Frame Data),包括類文件、方法等等。
13
*
14
* @author Administrator
15
*
16
*/
17
public class StackMemory {
18
19
public void methodA() {
20
System.out.println("產生一個棧幀F1");
21
int i = 1;
22
System.out.println("變量i 放入到棧幀F1中");
23
System.out.println("準備產生一個棧幀F2");
24
methodB("hello world");
25
}
26
27
public String methodB(String arg) {
28
System.out.println("產生一個棧幀F2");
29
System.out.println("參數arg 和 方法返回值 放入到棧幀F2中");
30
return arg;
31
}
32
33
public static void main(String[] args) {
34
StackMemory sm = new StackMemory();
35
System.out.println("準備產生一個棧幀F1,因為將要調用methodA方法");
36
sm.methodA();
37
}
38
39
}
40

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40
