1. JVM(Java Virtual Machine):
• 定义:Java虚拟机,是运行Java字节码的抽象计算机。
• 内存管理:负责内存的分配和回收,是JVM内存优化的核心。
2. 堆(Heap):
• 定义:JVM用于存放对象实例的内存区域。
• 堆大小调整:通过调整-Xms(初始堆大小)和-Xmx(最大堆大小)参数来优化堆内存的使用。
• 年轻代(Young Generation)与老年代(Old Generation)比例调整:通过-XX:NewRatio参数来调整年轻代和老年代的比例,以适应不同应用的需求。
• 年轻代内部调整:包括Eden区与Survivor区的比例调整(-XX:SurvivorRatio),以及是否使用两个Survivor区(-XX:+UseTwoSurvivors)。
3. 方法区(Method Area):
• 定义:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
• 优化术语:
• 方法区大小调整:通过-XX:PermSize(永久代初始大小,Java 8前)或-XX:MetaspaceSize(元空间初始大小,Java 8及以后)参数来调整方法区的大小。
4. 栈(Stack):
• 定义:线程私有的内存区域,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
• 优化术语:
• 栈大小调整:通过-Xss参数来调整线程的栈大小,以避免栈溢出或浪费内存。
5. 垃圾回收(Garbage Collection, GC):
• 定义:JVM自动回收不再使用的内存空间的过程。
• 优化术语:
• 垃圾回收器选择:包括Serial GC、Parallel GC、CMS GC、G1 GC等,根据应用的特点选择合适的垃圾回收器。
• 垃圾回收参数调整:如-XX:+UseG1GC(启用G1垃圾回收器)、-XX:MaxGCPauseMillis(设置GC的最大停顿时间)、-XX:GCTimeRatio(设置GC时间与应用程序运行时间的比例)等。
• 内存泄漏检测:使用工具(如VisualVM、JProfiler等)检测并修复内存泄漏问题。
6. 直接内存(Direct Memory):
• 定义:不是JVM堆内存的一部分,但可以通过Java的NIO类库直接访问的内存区域。
• 直接内存大小调整:通过-XX:MaxDirectMemorySize参数来限制直接内存的使用量。
7. 内存分配与晋升策略:
• 定义:JVM如何为新对象分配内存,以及对象何时从年轻代晋升到老年代的策略。
• 对象年龄阈值调整:通过-XX:MaxTenuringThreshold参数来调整对象晋升到老年代前的年龄阈值。
• 大对象直接进入老年代:通过-XX:PretenureSizeThreshold参数来设置大对象直接进入老年代的阈值。