目录
(p≧w≦q) 🧆前言:
主要是记录Jvm参数 后续直接方便看, 记录笔记还有点累 无语 ( •̀ ω •́ )y
(p≧w≦q) 🧆 JVM运行机制包括以下几个方面:
Java程序编译为字节码:Java程序首先被编译为字节码,这是一种中间语言,可以运行在任何支持Java虚拟机的平台上。
类加载:当Java程序运行时,JVM需要将字节码加载到内存中。类加载器负责加载类文件,并将其转换为JVM可以理解的格式。
字节码验证:在类加载时,JVM会对字节码进行验证,以确保它们符合Java语言规范。
JIT编译:JVM还可以使用即时编译器(JIT)将字节码编译成本地机器码,以提高程序的运行速度。
内存管理:JVM使用垃圾收集器来管理程序使用的内存。垃圾收集器会自动回收不再被程序引用的对象,并释放它们占用的内存。
程序执行:在字节码被加载到内存中后,JVM开始执行程序。程序在JVM中被解释为一系列指令,这些指令由JVM执行器按顺序执行。
异常处理:当程序发生异常时,JVM会捕获并处理异常。如果程序无法处理异常,则会抛出异常并终止程序的执行。
总的来说,JVM运行机制可以分为类加载、字节码验证、JIT编译、内存管理、程序执行和异常处理等多个方面。JVM的运行机制保证了Java程序的跨平台性、高效性和安全
(p≧w≦q) 🧆JVM参数:
JVM参数非常多,可以根据具体的需求进行设置。在实际应用中,需要根据应用的特点和性能需求进行调优,以提高应用的性能和稳定性。
-XX:MaxPermSize:用于设置永久代的最大大小,永久代用于存储类的信息和常量池等。
-XX:MetaspaceSize:用于设置元空间的初始大小,元空间用于存储类的信息和常量池等。
-XX:SurvivorRatio:用于设置新生代中Eden区和Survivor区的比例。
-XX:NewRatio:用于设置新生代和老年代的比例。
-XX:MaxTenuringThreshold:用于设置对象在新生代中存活的最大年龄。
-XX:CMSInitiatingOccupancyFraction:用于设置CMS垃圾回收器的触发阈值。
-XX:+HeapDumpOnOutOfMemoryError:用于在内存溢出时生成堆转储文件。
-XX:+PrintCommandLineFlags:用于输出JVM启动时的参数信息。
-XX:+UseCompressedOops:用于启用指针压缩,可以减少内存占用。
-XX:+UseStringDeduplication:用于启用字符串去重,可以减少内存占用。
-XX:+UseLargePages:用于启用大页内存,可以提高内存访问效率。
-XX:+UseNUMA:用于启用非一致性内存访问,可以提高内存访问效率。
-XX:+UseBiasedLocking:用于启用偏向锁,可以提高锁的性能。
-XX:+DisableExplicitGC:用于禁用System.gc()方法,可以避免不必要的垃圾回收。
-XX:+PrintCommandLineFlags:用于输出JVM启动时的参数信息。
-XX:CompileThreshold:用于设置JIT编译器触发编译的阈值。
-XX:ReservedCodeCacheSize:用于设置代码缓存区的大小。
-XX:MaxDirectMemorySize:用于设置直接内存的最大大小。
-XX:OnOutOfMemoryError:用于在内存溢出时执行指定的命令。
-XX:ErrorFile:用于设置错误日志文件的路径。
-XX:HeapDumpPath:用于设置堆转储文件的路径。
-XX:MaxGCPauseMillis:用于设置垃圾回收的最大停顿时间。
🧆下面列举一些常见的JVM调优场景:
内存不足:当应用程序需要处理大量数据时,可能会出现内存不足的情况。这时可以通过增加堆内存大小、优化垃圾收集器、减少内存泄漏等方式来解决问题。
GC过长:当应用程序中的垃圾收集时间过长时,可能会导致应用程序的性能下降。这时可以通过选择适合当前应用程序的GC算法、调整GC参数等方式来解决问题。
线程问题:当应用程序需要处理大量并发请求时,可能会出现线程问题,例如线程死锁、线程阻塞等。这时可以通过优化线程池、减少线程阻塞等方式来解决问题。
IO问题:当应用程序需要进行频繁的IO操作时,可能会出现IO问题,例如IO阻塞、IO性能低下等。这时可以通过优化IO操作、使用异步IO等方式来解决问题。
JVM性能问题:当应用程序的性能低下或崩溃时,可能是JVM本身的性能问题。这时可以通过选择合适的JVM版本、配置合适的JVM参数、减少JVM负载等方式来解决问题。
-
内存溢出:当Java应用使用的内存超过了JVM的限制时,会发生内存溢出。此时需要调整JVM的内存参数,包括-Xms、-Xmx、-Xmn等参数,以增加可用内存。
-
GC频繁:当Java应用中频繁进行垃圾回收时,会影响应用的性能。此时需要调整JVM的GC参数,包括-XX:+UseSerialGC、-XX:+UseParallelGC、-XX:+UseConcMarkSweepGC等参数,以提高垃圾回收的效率。
-
线程过多:当Java应用中创建了大量的线程时,会影响应用的性能和稳定性。此时需要调整JVM的线程参数,包括-XX:ThreadStackSize、-XX:MaxTenuringThreshold等参数,以优化线程的使用。
-
JIT编译效率低:当Java应用中的热点代码没有被JIT编译时,会影响应用的性能。此时需要调整JVM的JIT编译参数,包括-XX:+PrintCompilation、-XX:+PrintInlining等参数,以提高JIT编译的效率。
-
应用启动慢:当Java应用启动时间过长时,会影响应用的用户体验。此时需要调整JVM的启动参数,包括-XX:+UseFastAccessorMethods、-XX:+UseCompressedOops等参数,以提高应用的启动速度。