深入理解Java虚拟机-JVM高级特性与最佳实践–自动内存管理
Java区别于C++在于其自动内存管理,主要从5个方面介绍自动内存管理
- 内存区域
JVM可运行的内存区域主要由5部分组成,程序计数器、虚拟机栈、本地方法栈、Java堆、方法区
程序计数器与本地方法栈
虚拟机栈
方法区
Java堆
这里还提到了直接内存,在NIO中会用到直接内存,类似于C++的内存分配,不过其分配的内存不受JVM控制
- 内存溢出
程序计数器、虚拟机栈、本地方法栈、Java堆、方法区5个部分输了程序计数器没有内存溢出外,其他区域均有
内存溢出,同时也有参数进行调节
虚拟机栈–>-Xss
本地方法栈–>
方法区中的永久区–>-XPermSize
Java堆–>-Xms -Xmx - 内存分配
几个准则如下;
- 内存回收
由7个垃圾收集器组成,分别为年轻代采用的复制收集算法,年老代采用标记-清除算法,分别功能如下图:
- 内存模型
由工作内存与主内存组成,工作内存与主内存之间通过LOADy与SAVE指令交换值,示意图如下: