当前位置:首页 > 虚拟机 > 正文

jvm虚拟机与性能调优实战


一、完整整理关于JVM—JAVA虚拟机的简介

性能优化的关键:JVM揭晓


JVM作为JAVA的灵魂,通过实现WORA开关(WriteOnce、RunAnywhere)赋予Java代码跨平台的魔力。它的应用范围已经超过了Java,现在支持Scala、Kotlin等更多编程语言。作为一个独立于服务器的执行环境,它兼容许多不同的平台和操作系统。


Java的独特性


Java与传统的编译/解释语言不同,传统的编译/解释语言首先编译为字节码,然后由JVM性能使用。解释。类加载器是这个过程的主角。它负责加载和链接.class文件,包括三个加载和链接步骤——加载、验证、准备和执​​行构造函数。线程安全,因为多线程可能会导致并发问题。


JVM架构细节


运行时数据区
方法区:save存储类数据和方法代码,如果没有的话管理不当可能会导致OutOfMemoryError。
堆:对象和实例变量的存储位置。它被所有线程共享,但它不是线程安全的,很容易导致StackOverflowError。
栈区:私有线程,存放局部变量和方法调用,执行效率较高,但需要警惕StackOverflowError。
程序计数器:每个线程都有一个独立的程序计数器,记录当前指令地址。
本机方法栈:为了支持本机方法而存在,并单独分配给每个新线程。
执行引擎:字节码在这里转换为机器码,解释器逐行执行,JIT编译器提供性能优化。
垃圾收集器:自动清理堆内存中不需要的对象,包含标记扫描策略,包括串行GC和并行GC。例如,G1GC适合优化多线程大堆应用程序。

交互与挑战


通过JNI,Java代码和非Java代码(例如C/C++)通过root关键字无缝地协同工作brary()加载本地库。常见的JVM问题包括ClassNotFoundExcecption、NoClassDefFoundError、OutOfMemoryError和StackOverflowError,这些都是开发过程中应密切关注的警告信号。


深入JVM世界需要从基础开始分析源代码和高级应用程序。掌握参数调整工具是关键。各种相关书籍和主题,例如JVM入门教程、深入的源代码分析以及高级技术和实践,将帮助您成为JVM大师。


二、java虚拟机内存因程序需要已确定在2—4G范围内,请问怎样分配该内存较好。请各位大神给出几套方案!

方便的就是最好的,不要盲目添加参数。

1.首先,建议-Xms和-Xmx设置一致,设置为2G/4G。记得添加-server参数,即启动命令行检查以下参数

java-server-Xms2000m-Xmx2000m

2.以上JVM的基本配置就完成了,此时测试JVM,添加JVM的gc参数来分析内存使用情况。

java-server-Xms2000m-Xmx2000m-Xloggc:$CATALINA_HOME/logs/

3.使用HPjmter或jprofile配置JVM解析内存回收日志。了解内存瓶颈在哪里,并进行相应的分析和调整。这个性能调优不是你可以随便调整的,它会产生负面影响。如果您不知道上述软件,请在GOOGLE上搜索。