为什么要理解运行机制?
使用oop编写的程序特征在于内存的使用方式,如果编写的时候完全不了解内部的运行机制,那么编写的程序会占用过多的内存,从而影响机器的资源,有时即使在调试的时候发现了问题,也有可能什么都做不了
编译器
将程序中编写的命令转换为机器语言
解释器
将程序边解释边运行
中间代码
将源代码用特定的编译器转换为中间代码,在使用特定的解释器来执行
线程与进程
线程 -> 程序的运行单位
计算机上独立运行的应用程序 -> 进程
进程比线程大,一个进程中会用到多个线程
通过并发处理多个线程,可以高效利用CPU资源
静态区、堆区和栈区
程序分为:静态区、堆区和栈区三个部分
静态区:该区域中存储的信息配置在程序运行时不会发生变化。
堆区:在程序运行时动态分配的内存区域。根据应用程序请求的大小进行分配,当不再需要的时候就进行释放。
栈区:用于线程的控制的内存区域。
与堆区的区别:堆区供多个线程同时使用,栈区为每个线程准备一个,用于控制子程序调用的内存区域,存储着子程序的参数、局部变量和返回位置等信息。
每个类只加载一个类的信息,存放在静态区。
每次创建实例都会使用堆区。程序会在堆区分配所需大小的内存,用于存储该类的实例变量。
变量
在变量中存储实例的指针。
该变量不一定在堆区中。如果是方法的参数或者局部变量,则配置在栈中,也有可能配置在方法区(静态区)的类信息中。
复制存储的实例变量要注意
当将存储实例的变量赋值给其他变量时,只是复制指针,堆区中的实例本身并不会发生变化。
垃圾回收
垃圾回收
脱离网络关系的实例,即从根本无法到达的实例,就是垃圾回收的对象。