我们学习知识,不仅要知其然,还要知其所以然,你的工资必定和你学习的深度成正比。
在以往.net的学习过程中,我们了解了怎么去开发一个程序,并有了一定的开发经验,但是一个程序具体是怎么在内存中运行的呢?
1、首先来看一张图。
2、在这张图中,我们可以很清楚的了解到:
- 栈中主要存放局部变量。
- 堆中存放new出来的东西。
- 而static 的变量或者字符串常量 则存在在 data segment(数据区)中;
- 那么类中方法的话,是存在在 code segment(代码区)中了。
3、举例
给一个简单的java代码例子大家加深理解
public static void main(String args[])
{
Point p = new Point(1, 2, 3);
} class Point{
int x, y, z;
Point(int _x, int _y, int _z)
x = _x;
y = _y;
z = _z;
}
此程序的运行过程如下:
- 把程序从硬盘加载到内存区
- 找到main方法开始执行
- 执行程序过程中的内存管理
栈内存中出现局部变量p;
堆内存中出现数据区;
栈中的p的指针指向堆中相应的数据区。如图所示。