目录
回顾上节JVM 内存划分:
- 方法区(线程共享):常量、静态变量、JIT(即时编译器) 编译后的代码也都在方法区;
- 堆内存(线程共享):垃圾回收的主要场所;
- 程序计数器: 当前线程执行的字节码的位置指示器;
- 虚拟机栈(栈内存):保存局部变量、基本数据类型变量以及堆内存中某个对象的引用变量;
- 本地方法栈 :为 JVM 提供使用 native 方法的服务。
类似-Xms、-Xmn 这些参数的含义:
堆内存分配:
- JVM 初始分配的内存由-Xms 指定,默认是物理内存的 1/64;
- JVM 最大分配的内存由-Xmx 指定,默认是物理内存的 1/4;
- 默认空余堆内存小于 40% 时,JVM 就会增大堆直到-Xmx 的最大限制;空余堆内存大于 70% 时,JVM 会减少堆直到 -Xms 的最小限制;
- 因此服务器一般设置-Xms、-Xmx 相等以避免在每次 GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
非堆内存分配:
- JVM 使用-XX:PermSize 设置非堆内存初始值,默认是物理内存的 1/64;