Windows Server 2008 R2上java类加载缓慢

Windows Server 2008 R2上java类加载缓慢,java,windows,windows-server-2008-r2,sql-parser,Java,Windows,Windows Server 2008 R2,Sql Parser,对于SQL解析,我们在Java web应用程序中使用(GSP)。如果我们在WindowsServer2008R2和Java7上使用GSP部署我们的应用程序,我们会看到在类加载期间出现100%的CPU峰值,这可能会持续几分钟。在初始类加载之后,一切都正常工作,直到我们关闭应用服务器并卸载类:100%的CPU峰值回来了。 如果我们将相同的代码库部署到Windows Server 2012、Windows 7 Enterprise、OS X或Linux服务器,则不会出现这样的峰值。在WindowsSe

对于SQL解析,我们在Java web应用程序中使用(GSP)。如果我们在WindowsServer2008R2和Java7上使用GSP部署我们的应用程序,我们会看到在类加载期间出现100%的CPU峰值,这可能会持续几分钟。在初始类加载之后,一切都正常工作,直到我们关闭应用服务器并卸载类:100%的CPU峰值回来了。 如果我们将相同的代码库部署到Windows Server 2012、Windows 7 Enterprise、OS X或Linux服务器,则不会出现这样的峰值。在WindowsServer2008R2上使用Java8稍微改进了启动

使用Microsoft的Process Monitor,我们看到从这个jar加载类时浪费了很多时间。gsp.jar中的类文件被混淆了。除了新添加的jar之外,我们可以排除任何其他原因。仅仅通过解析SQL语句,冷启动时间就会显著增加。禁用防病毒功能无效。并非所有客户都可以选择升级到更新的Windows Server版本

我们正在运行此GSP版本:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.)
Built-By: Gudu Software
Vendor: Gudu Software
Title: General SQL Parser Java Version
Version: 1.6.0.5
使用Windows Server 2008 R2执行此测试程序需要40秒以上,在OS X上需要1.5秒

package com.stackoverflow;

import gudusoft.gsqlparser.EDbVendor;
import gudusoft.gsqlparser.TGSqlParser;

public class TestGSP {
    public static void main(String[] args) {
        TGSqlParser parser = new TGSqlParser(EDbVendor.dbvmssql);
        parser.setSqltext("select a from b where c = d");
        parser.parse();
    }
}
有人知道是什么导致了这个问题以及如何避免它吗


编辑 我使用全新的Windows Server 2008 R2,并使用不同的RAM/JVM设置运行测试程序:

e、 g.:
java-Xmx1G-classpath“\.\gsp.jar”com.stackoverflow.TestGSP

+--------------+-----------+----------------+
| Java version | RAM in GB | Duration in ms |
+--------------+-----------+----------------+
| 1.7.0_79     |         1 |          33438 |
| 1.7.0_79     |         2 |          33640 |
| 1.7.0_79     |         4 |          33484 |
| 1.8.0_66     |         1 |           5437 |
| 1.8.0_66     |         2 |           5563 |
| 1.8.0_66     |         4 |           5703 |
+--------------+-----------+----------------+
如果我在OS X上运行相同的测试,我会得到以下持续时间:

+--------------+-----------+----------------+
| Java version | RAM in GB | Duration in ms |
+--------------+-----------+----------------+
| 1.7.0_79     |         1 |           1024 |
| 1.7.0_79     |         2 |            999 |
| 1.7.0_79     |         4 |            968 |
| 1.8.0_65     |         1 |            601 |
| 1.8.0_65     |         2 |            601 |
| 1.8.0_65     |         4 |            603 |
+--------------+-----------+----------------+

更改JVM版本有帮助,但增加RAM并不能解决问题。

您是从网络共享加载类还是类似的东西?@Stephen:不是,类和JAR是本地的。我们使用Tomcat作为应用服务器,JAR在WEB-INF/LIB中。您有足够的RAM吗?说真的,我认为服务器和配置方式的问题。。。本质上不是Java。@StephenC服务器总共有6GB RAM,2GB分配给web应用程序进程。我将用更多的内存重新运行我的测试。我也不认为这主要是Java的问题,而是Windows的问题。@StephenC我用一些措施更新了我的问题