【带你了解一下Jvm?】

文章介绍了JVM的运行机制,包括字节码编译、类加载、字节码验证、JIT编译、内存管理和异常处理等,并列举了一些常见的JVM参数及其在调优中的作用,如内存分配、垃圾收集策略等。同时,讨论了常见的JVM调优场景,如内存不足、GC过长、线程和IO问题等。
摘要由CSDN通过智能技术生成

 

目录

(p≧w≦q) 🧆前言:

(p≧w≦q) 🧆 JVM运行机制包括以下几个方面:

 (p≧w≦q) 🧆JVM参数:

🧆下面列举一些常见的JVM调优场景:


(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参数非常多,可以根据具体的需求进行设置。在实际应用中,需要根据应用的特点和性能需求进行调优,以提高应用的性能和稳定性。

  1. -XX:MaxPermSize:用于设置永久代的最大大小,永久代用于存储类的信息和常量池等。

  2. -XX:MetaspaceSize:用于设置元空间的初始大小,元空间用于存储类的信息和常量池等。

  3. -XX:SurvivorRatio:用于设置新生代中Eden区和Survivor区的比例。

  4. -XX:NewRatio:用于设置新生代和老年代的比例。

  5. -XX:MaxTenuringThreshold:用于设置对象在新生代中存活的最大年龄。

  6. -XX:CMSInitiatingOccupancyFraction:用于设置CMS垃圾回收器的触发阈值。

  7. -XX:+HeapDumpOnOutOfMemoryError:用于在内存溢出时生成堆转储文件。

  8. -XX:+PrintCommandLineFlags:用于输出JVM启动时的参数信息。

  9. -XX:+UseCompressedOops:用于启用指针压缩,可以减少内存占用。

  10. -XX:+UseStringDeduplication:用于启用字符串去重,可以减少内存占用。

  11. -XX:+UseLargePages:用于启用大页内存,可以提高内存访问效率。

  12. -XX:+UseNUMA:用于启用非一致性内存访问,可以提高内存访问效率。

  13. -XX:+UseBiasedLocking:用于启用偏向锁,可以提高锁的性能。

  14. -XX:+DisableExplicitGC:用于禁用System.gc()方法,可以避免不必要的垃圾回收。

  15. -XX:+PrintCommandLineFlags:用于输出JVM启动时的参数信息。

  16. -XX:CompileThreshold:用于设置JIT编译器触发编译的阈值。

  17. -XX:ReservedCodeCacheSize:用于设置代码缓存区的大小。

  18. -XX:MaxDirectMemorySize:用于设置直接内存的最大大小。

  19. -XX:OnOutOfMemoryError:用于在内存溢出时执行指定的命令。

  20. -XX:ErrorFile:用于设置错误日志文件的路径。

  21. -XX:HeapDumpPath:用于设置堆转储文件的路径。

  22. -XX:MaxGCPauseMillis:用于设置垃圾回收的最大停顿时间。

🧆下面列举一些常见的JVM调优场景:

  • 内存不足:当应用程序需要处理大量数据时,可能会出现内存不足的情况。这时可以通过增加堆内存大小、优化垃圾收集器、减少内存泄漏等方式来解决问题。

  • GC过长:当应用程序中的垃圾收集时间过长时,可能会导致应用程序的性能下降。这时可以通过选择适合当前应用程序的GC算法、调整GC参数等方式来解决问题。

  • 线程问题:当应用程序需要处理大量并发请求时,可能会出现线程问题,例如线程死锁、线程阻塞等。这时可以通过优化线程池、减少线程阻塞等方式来解决问题。

  • IO问题:当应用程序需要进行频繁的IO操作时,可能会出现IO问题,例如IO阻塞、IO性能低下等。这时可以通过优化IO操作、使用异步IO等方式来解决问题。

  • JVM性能问题:当应用程序的性能低下或崩溃时,可能是JVM本身的性能问题。这时可以通过选择合适的JVM版本、配置合适的JVM参数、减少JVM负载等方式来解决问题。

 

  1. 内存溢出:当Java应用使用的内存超过了JVM的限制时,会发生内存溢出。此时需要调整JVM的内存参数,包括-Xms、-Xmx、-Xmn等参数,以增加可用内存。

  2. GC频繁:当Java应用中频繁进行垃圾回收时,会影响应用的性能。此时需要调整JVM的GC参数,包括-XX:+UseSerialGC、-XX:+UseParallelGC、-XX:+UseConcMarkSweepGC等参数,以提高垃圾回收的效率。

  3. 线程过多:当Java应用中创建了大量的线程时,会影响应用的性能和稳定性。此时需要调整JVM的线程参数,包括-XX:ThreadStackSize、-XX:MaxTenuringThreshold等参数,以优化线程的使用。

  4. JIT编译效率低:当Java应用中的热点代码没有被JIT编译时,会影响应用的性能。此时需要调整JVM的JIT编译参数,包括-XX:+PrintCompilation、-XX:+PrintInlining等参数,以提高JIT编译的效率。

  5. 应用启动慢:当Java应用启动时间过长时,会影响应用的用户体验。此时需要调整JVM的启动参数,包括-XX:+UseFastAccessorMethods、-XX:+UseCompressedOops等参数,以提高应用的启动速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是汤圆丫

怎么 给1分?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值