【问题标题】:Application runs faster in eclipse应用程序在 Eclipse 中运行得更快
【发布时间】:2012-04-11 19:03:03
【问题描述】:

我在 Eclipse 中有一个可运行的 Java SE 应用程序。我引导 JPA 在普通的 java 6 SE 环境中工作。对数据库中不同表的每个请求不超过 100 毫秒。

问题是,当我导出可运行 jar 并说 java -jar myapp.jar 时,对数据库的每个请求大约需要 9 秒。

我不明白为什么当我从 eclipse 运行应用程序时它会更快

【问题讨论】:

  • 你是如何测量的?您使用哪个 vm args 来运行该进程?
  • 我通过以毫秒为单位记录计算的时间来测量它。我使用 Log4j 并且日志记录级别相同 = "DEBUG"
  • 是的,但问题是“它是否使用相同的数据库”?如果它是一个不同的模式,表中充满了记录,而 eclipse 使用的模式只有很少的记录,你可能需要通过添加适当的索引来调整你的数据库
  • 您确定 Eclipse 使用的 jvm 与您启动应用程序时使用的 jvm 相同吗?
  • 不,他们正在访问相同的 ip、相同的端口、相同的架构。

标签: java eclipse hibernate jpa


【解决方案1】:

实际上,每次我向数据库发出请求时,我都是在创建一个实体管理器:

Persistence.createEntityManagerFactory( "mysqldb" );

为了优化实体管理器的创建,我使用了这样的单例实体工厂:

private static EntityManagerFactory em = Persistence
        .createEntityManagerFactory( "mysqldb" );

public static EntityManagerFactory getEmf()
{
    return em;
}

这有助于提高应用程序在 eclipse 之外的性能,但是当我在 eclipse 中运行它时性能没有变化。

我不确定从 Eclipse 启动应用程序时效果更好的原因是什么,但这个解决方案暂时解决了我的问题。

【讨论】:

  • +1 用于整理您自己的问题并在此处跟进 - 很高兴听到您对此有所了解
【解决方案2】:

您可以在两个版本上使用 -verbose:class 来查看它是否加载了导致速度减慢的不同版本的类

【讨论】:

  • 当我在 Eclipse 的配置中添加 -verbose:class 时,我得到了类列表。当我导出 jar 或运行 java -jar myapp.jar -verbose:class 时,没有显示任何内容。
  • 将 -verbose:class 放在 -jar 之前
  • 对不起。我使用类加载的控制台输出生成了一个文件,并在控制台中使用 diff 来比较文件。最大的区别在于 eclipse 中的库是从我创建的用户库中加载的,而在另一种情况下,类是从 jar 中包含的库中加载的。我真的不认为这可能是问题
  • 不,这听起来绝对不错。必须想点别的。
  • 我只是发布一个可能的答案
【解决方案3】:

我不确定如何使用 eclipse 编译器。 eclipse使用的ant脚本是:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project Server">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required                                        -->
<target name="create_run_jar">
    <jar destfile="myapp.jar" filesetmanifest="mergewithoutmain">
        <manifest>
            <attribute name="Main-Class" value="myapp.main.Main"/>
            <attribute name="Class-Path" value="."/>
        </manifest>
        <fileset dir="dir.../Myapp/build/classes"/>
        <zipfileset excludes="META-INF/*.SF" src=
            ..exclude all libraries
    </jar>
</target>
</project>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多