欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java性能调优可能点 博客分类: java javajvm 

程序员文章站 2024-02-22 16:16:46
...
1. 数据库驱动包 必须要和数据库服务器端驱动包一致。(可能性能问题)
2. 调整JVM参数以提高性能
    四种常用手段
    a. 调整内存大小
        JVM两种内存:栈内存(Stack)和堆内存(Heap)。栈内存特点:空间比较小,速度快,用来存储对象的引用及过程中的基本类型;而堆内存特点是内存空间比较大,速度慢,一般对象都会放在这里生成、使用和消亡。
        栈内存是线程开辟,线程结束,栈内存有JVM回收,因此它的大小一般不会对性能有太大影响,但是它会影响系统的稳定性,在超过栈内存的容量时,系统会报*Error错误。可以通过“java -Xss <size>”设置栈内存的大小来调整。
        堆内存的调整不能太随意,太小,GC操作太频繁,轻则导致系统性能急剧下降,重则导致系统根本无法使用;太大,浪费,系统不稳定。
    b. 调整堆内存中各种分区的比例
        JVM堆内存包括三部分:新生内存(Young Generation Space)、养老区(Tenuregeneration space)、永久存储区(Permanent Space),其中新生成的对象都在新生去,它又分为伊甸区(Eden Space)、幸存0区(Survivor 0 Space)和幸存1区(Survivor 1 Space),当在程序中使用了new关键字时,首先在伊甸区生成该对象,如果伊甸区满了,则用垃圾回收器进行回收,然后把剩余的对象移动到幸存区(0区或者1区),可如果幸存区也满了,垃圾回收器在次回收,然后把剩余的对象移动到养老区,那么养老去也满了?此时就触动Full GC(此操作非常危险,当操作时,JVM会停止所有的执行,所有系统资源都会让位给垃圾回收器),会对所有的对象过滤一遍,检查是否有可以回收的对象,如果还没有的话就抛出OutOfMemoryError错误。
    可以参考 《JVM Specification》
    一般情况下,设置新生区和养老区的比例为1:3. 设置不合理会导致系统不稳定。
    如:
        java -XX:NewSize = 32m -XX:MaxNewSize=640m -XX:maxPermSize = 1280m -XX:NewRatio = 5
        解释:指定新生代初始化32MB,最大不超过640mb,养老区最大不超过1280mb,新生区和养老区的比例为1:5.
    c. 更改GC的垃圾回收策略
      java程序最大的障碍就是垃圾回收,我们不知道它何时会发生,也不知道它会执行多长时间,但是我们可以想办法改变它对系统的影响,比如启动并行垃圾回收、规定并行回收的线程数量,命令格式如下:
        java -XX:+UserParallelGC -XX:ParallelGCThreads = 20
        同时还可以修改:UseSerialGC(启动串行GC,默认值),ScavengeBeforeFullGC(新生代GC优于FullGC执行),UseConcMarkSweepGC(对老生代采用并发标记交换算法进行GC)
这些都需要在系统中逐步调试。
    d. 更好JVM
        三种常见 jvm: Java HotSpot VM,Oracle JRockit JVM , IBM JVM。若上述调整作用都不大可考虑调整JVM.
相关标签: java jvm