本篇學(xué)習(xí)棧內(nèi)存基本知識(shí),附上JAVA代碼
1
package com.howard.jvm;
2
/**
3
* JAVA的內(nèi)存管理 (一) 棧內(nèi)存
4
* Stack棧 棧內(nèi)存 JAVA程序的運(yùn)行區(qū)。 是在線程創(chuàng)建時(shí)創(chuàng)建,它的生命周期是跟隨線程的生命周期,線程結(jié)束棧內(nèi)存也就釋放,對(duì)于棧來(lái)說(shuō)不存在垃圾回收問(wèn)題
5
* 只要線程一結(jié)束,該棧就Over。
6
* 棧中的數(shù)據(jù)都是以棧幀(Stack Frame)的格式存在,棧幀是一個(gè)內(nèi)存區(qū)塊,是一個(gè)數(shù)據(jù)集,是一個(gè)有關(guān)方法(Method)和運(yùn)行期數(shù)據(jù)的數(shù)據(jù)集,當(dāng)一個(gè)方法
7
* A被調(diào)用時(shí)就產(chǎn)生了一個(gè)棧幀F(xiàn)1,并壓入到棧中,A方法又調(diào)用B方法,于是產(chǎn)生棧幀F(xiàn)2也被壓入棧,執(zhí)行完畢后,先彈出F2棧幀,然后再?gòu)棾鯢1棧幀,遵循“
8
* 后進(jìn)先出”的原則。
9
* 棧幀中主要保存3類數(shù)據(jù):
10
* 1. 本地變量(local Variables),包括輸入?yún)?shù)和輸出參數(shù)以及方法內(nèi)變量;
11
* 2. 棧操作(Operand Stack),記錄入棧和出棧操作;
12
* 3. 棧幀數(shù)據(jù)(Frame Data),包括類文件、方法等等。
13
*
14
* @author Administrator
15
*
16
*/
17
public class StackMemory {
18
19
public void methodA() {
20
System.out.println("產(chǎn)生一個(gè)棧幀F(xiàn)1");
21
int i = 1;
22
System.out.println("變量i 放入到棧幀F(xiàn)1中");
23
System.out.println("準(zhǔn)備產(chǎn)生一個(gè)棧幀F(xiàn)2");
24
methodB("hello world");
25
}
26
27
public String methodB(String arg) {
28
System.out.println("產(chǎn)生一個(gè)棧幀F(xiàn)2");
29
System.out.println("參數(shù)arg 和 方法返回值 放入到棧幀F(xiàn)2中");
30
return arg;
31
}
32
33
public static void main(String[] args) {
34
StackMemory sm = new StackMemory();
35
System.out.println("準(zhǔn)備產(chǎn)生一個(gè)棧幀F(xiàn)1,因?yàn)閷⒁{(diào)用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
