JVM 的内存模型非常重要,主要有以下几个部分:
•堆(Heap):用来存储对象实例。这是JVM运行时所使用的主要内存。
•方法区(Method Area):用来存储已loaded和被虚拟机加载的类的信息。包括类名称、方法签名、字段等。
•本地方法栈(Native Method Stack):每个线程具有一个 Native Method Stack。用来存储正在执行的方法的信息,如方法调用、参数、局部变量等。
•程序计数器(Program Counter Register):用来存储当前线程正在执行的字节码的地址。
•java堆栈(Java Stack):用来存储正在执行的方法的信息。
JVM垃圾回收主要为了回收堆上不再使用的对象,以释放内存。主要有以下两种策略:
• 标记-清除(Mark-Sweep):标记已知的活对象,然后清除未标记的对象。
• 复制(Copying):将内存划分为两个空间,每次只使用其中一个空间。当一个空间已满时,将其中还活着的对象复制到另一个空间,然后清空原先的空间。
JVM会在合适的时候进行垃圾回收,关闭并清理不再使用的对象,释放内存资源。这都在程序运行时自动进行,不需要开发者手动干预。