【潘森教育】关于堆内存与栈内存
2025-04-05
堆内存和栈内存都是内存,物理上没有什么区别,只是不同的程序为了效率而进行的数据存储区域的划分。
首先,我们要知道什么是程序运行:
如果程序是 exe 结尾的,比如 C 语言编译后的程序。a.exe 的运行就是操作系统把 a.exe 文件及相关的资源文件(比如下图中除了 eclipse.exe 应用程序文件外,还需要很多其他的资源文件才能正常运行 eclipse 软件系统)从磁盘加载(拷贝)到内存中,然后在内存的翻译成机器指令给 CPU 执行的过程。
同样,java 编写的程序,由 javac 编译成的是字节码,也就是 class 文件(如下图所示),所以磁盘上存储的是 *.class 文件,一个 java 程序由多个字节码文件和若干资源文件组成。java 程序的运行就是系统把字节码文件和资源文件从磁盘拷贝到内存中,然后 CPU 在内存中根据字节码内的逻辑(顺序结构、循环结构、分支结构等)依次执行不同的操作。只不过 java 为了实现 “跨平台 “, 所以 java 的字节码在内存中还需要 java 虚拟机的解析(不同的操作系统有不同的 java 虚拟机,但是功能都是把字节码解析成机器码)。