Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序在eclipse中运行得更快_Java_Eclipse_Hibernate_Jpa - Fatal编程技术网

Java 应用程序在eclipse中运行得更快

Java 应用程序在eclipse中运行得更快,java,eclipse,hibernate,jpa,Java,Eclipse,Hibernate,Jpa,我在eclipse中有一个可运行的JavaSE应用程序。我引导JPA在正常的Java6SE环境中工作。对数据库中不同表的每个请求不超过100ms 问题是,当我导出runnable jar时,我说java-jar myapp.jar,每个对数据库的请求大约需要9秒钟 我不明白为什么当我从eclipse运行应用程序时它会更快,我不知道如何使用eclipse编译器。eclipse使用的ant脚本是: <?xml version="1.0" encoding="UTF-8" standalone=

我在eclipse中有一个可运行的JavaSE应用程序。我引导JPA在正常的Java6SE环境中工作。对数据库中不同表的每个请求不超过100ms

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


我不明白为什么当我从eclipse运行应用程序时它会更快,我不知道如何使用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>


您可以在两个版本上都使用-verbose:class来查看它是否加载了导致减速的不同版本的类。事实上,每次我向数据库发出请求时,我都在创建一个实体管理器:

Persistence.createEntityManagerFactory( "mysqldb" );
为了优化实体管理器的创建,我使用了如下单例实体工厂:

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

public static EntityManagerFactory getEmf()
{
    return em;
}
这有助于提高eclipse外部应用程序的性能,但在eclipse内部运行时,性能没有变化


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

您是如何衡量它的?您使用哪个vm参数来运行进程?我通过记录计算的时间(以毫秒为单位)来测量它。我使用Log4j,日志记录级别是相同的=“DEBUG”是的,但问题是“它使用的是相同的数据库吗”?如果它是一个不同的模式,表中充满了记录,而eclipse使用的模式只有很少的记录,那么您可能需要通过添加适当的索引来调整您的数据库您确定eclipse使用的jvm与您启动应用程序时使用的jvm相同吗?不,它们访问的是相同的ip、相同的端口,当我在eclipse的配置中添加-verbose:class时,我得到了类的列表。导出jar或运行java-jar myapp.jar-verbose:class时,不会显示任何内容。我使用类加载的控制台输出生成了一个文件,并在控制台中使用diff来比较这些文件。最大的区别在于eclipse中的库是从我创建的用户库加载的,而在另一种情况下,类是从jar中包含的库加载的。我真的不认为这是个问题不,听起来很好。我必须想点别的。我只是在这里发布了一个可能的答案+1,用于整理你自己的问题并跟进-很高兴听到你有了进展