我们有一个使用 glassfish 的 java 系统,因为在一些小型 pc 中系统运行缓慢,我们决定使用 netbeans 分析器,它向我们显示了以下信息:
Threads: 91
Loaded Classes: 14.186 (max)
Total Memory: 282 MB
Used Memory: 194 MB
Time Spent in GC: 0%
Surviving Generations: 79%
Detail:
Total bytes: 109.430.481
Total classes: 14.603
Total instances: 1.655.029
Classloaders: 433
GC roots: 3.757
Number of objects pending for finalization: 0
Environment:
OS: Windows Vista (6.0) Service Pack 2
Architecture: x86 32bit
Java Home: C:\Program Files\Java\jdk1.7.0_03\jre
Java Version: 1.7.0_03
JVM: Java HotSpot(TM) Client VM (22.1-b02, mixed mode)
Java Vendor: Oracle Corporation
Head Walker: (High Value)
Class: String
Instances: 237.083
Instance size: 24
Total size: 5.689.992
Retained size: 22.755.966
使用我们系统的库是:
Struts 2.3.1
Spring 3.0.6
AspectJ 1.7.3
Jasper Report 5.1
Cors Filter
Poi 3.7
Itext 2.1.7
Postgresql 9.1
commons-lang 3-3.1
commons-pool 1.5.5
commons-dbcp 1.4
我们也遵循内存图表中的字符串类,大多数内存消耗在 Xwork (struts) 和 Aspectj 库使用的类中
我们的问题是:
1- 当大部分消耗都在库中时,如何降低 CPU 和内存消耗?
2- 我可以在系统上做哪些其他速度改进?