1. 数据库驱动包 必须要和数据库服务器端驱动包一致。(可能性能问题)
2. 调整JVM参数以提高性能
四种常用手段
a. 调整内存大小
JVM两种内存:栈内存(Stack)和堆内存(Heap)。栈内存特点:空间比较小,速度快,用来存储对象的引用及过程中的基本类型;而堆内存特点是内存空间比较大,速度慢,一般对象都会放在这里生成、使用和消亡。
栈内存是线程开辟,线程结束,栈内存有JVM回收,因此它的大小一般不会对性能有太大影响,但是它会影响系统的稳定性,在超过栈内存的容量时,系统会报StackOverflowError错误。可以通过“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.
2. 调整JVM参数以提高性能
四种常用手段
a. 调整内存大小
JVM两种内存:栈内存(Stack)和堆内存(Heap)。栈内存特点:空间比较小,速度快,用来存储对象的引用及过程中的基本类型;而堆内存特点是内存空间比较大,速度慢,一般对象都会放在这里生成、使用和消亡。
栈内存是线程开辟,线程结束,栈内存有JVM回收,因此它的大小一般不会对性能有太大影响,但是它会影响系统的稳定性,在超过栈内存的容量时,系统会报StackOverflowError错误。可以通过“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.