学习Java,比较重要的一个思想就是分析内存中程序执行的过程。
废话不多说,我们首先要知道的是程序比如我们编写的.java程序,存放的位置是在硬盘的某一个区域中,如果不执行这个程序,那么它就默默地存在,不起任何作用。当我们开始执行某一个程序时,程序首先要做的事就是把自己也就是代码,全部load或者说装载到内存区域中去。然后Windows本身的系统代码会找到自己编写的程序代码的main方法,从main方法开始执行程序。第三,当这个程序开始执行之后,程序中的所有数据会被内存分类管理起来,一般来说内存管理最基础的会分成四部分:code segment(存放代码)、data segment(存放静态变量和字符串常量)、stack(存放局部变量)、heap(存放new 出来的东西)。
真正执行的时候,代码首先会被放在code segment中,OS(操作系统)找到相关的main方法后,才开始执行后面的代码。
现在,我用一个简单的例子程序来说明一下:
public class practic1 {
public static void main(String[] args) {//当OS找到main 方法,开始执行后面的代码
int a = 123;//声明一个变量a,a是在main方法中声明的,所以是个局部变量也是一个基本类型的变量,赋给它的值123会存放在stack区域中。
double b = 3.1415;//同上
String c = "Hello World";//声明一个变量c,c也是在main 方法中声明的,但是定义c这个变量的是一个字符串型,它是引用类型的变量,所以赋给它的值会存放在heap区域中,c本身是存放在stack区域中,它本身保存的其实是它的值在heap区域中的首地址。
System.out.println("" + a + b + c);//现在要打印输出这几个变量的值,a和b都是存放在stack区域中,所以程序会从这个区域中去调用它们的值。调用c的时候,是调用的c保存的地址所指向heap区域中的内容。
}
}
因为学习进度的原因,目前就说这么多,后面还会持续更新这一主题的内容。如果觉得有用,请动手点个赞,不喜勿喷!