background image

2 // Line 1
3 int i=4;
4 // Line 2
5 int y=2;
6 //Line 3
7 class1 cls1 = new class1();
8 }

这里一共有 3 行代码。让我们一下逐行看一下它们是如何执行的:

 

第 1 行:当这行代码执行时,编译器为它分配一小块栈内存。运行时栈负责提
供程序所需的内存;

第 2 行:程序继续执行。如同名字一样,栈在第一块内存的顶部分配了一块内
存。你也可以认为是模块或零件一块一块叠起来;

    内存的分配与释放遵循后进先出(后进先出)逻辑,换句话说,内存只
能在示例中 i 内存块的顶部分配或释放。

第 3 行:在第 3 行,我们创建了一个对象。当该行执行时,编译器在站上创建

“ ”

了一个指针,真实的对象存储在另一种叫 堆 的内存中。"堆"并不跟踪运行内
存,它更像一堆随时可以访问的对象。堆用于动态分配内存。这里需要着重说
明的是引用指针是分配在栈上。声明 Class1 cls1 时并不会给 Class1 的实例分
配内存,而是分配一个栈变量 cls1(并设置为 null),

“ ”

然后把它指向 堆 。