Tag: 性能

为什么我的应用程序在IntelliJ中比命令行运行得更快?

我们有一个应用程序通过拆分数据并对其进行排序来导入大量文件。 运行JUnit测试用例时,整个过程大约需要16分钟 。 同样的测试,用mvn clean test -Dtest=MyTest在34分钟内完成 。 我们正在调用/bin/sort来对文件进行排序。 这种情况似乎需要更长的时间。 我不明白有什么不同。 看着它运行的IntelliJ /Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 -Didea.launcher.bin.path=/Applications/IntelliJ IDEA 10.app/bin -Dfile.encoding=UTF-8 -classpath %classhpath% com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 xxx.IntTestImportProcess,testImportProcess 我在OS X上。所有类都是使用Spring注入的。 有哪些可能的建议是关于IntelliJ中这种性能提升背后的理论? 测试是相同的。 我无法共享所有代码,因为有这么多。 但我可以根据要求添加任何细节。 这是我的主要课程,以及我如何运行这两个课程。 public static void main(String… args) throws IOException { if(args.length != 2) { System.out.println(“Usage: \n java -jar client.jar spring.xml data_file”); System.exit(1); } ApplicationContext applicationContext […]

System.currentTimeMillis()是Java中时间性能的最佳衡量标准吗?

System.currentTimeMillis()是Java中时间性能的最佳衡量标准吗? 使用它来比较采取行动之前的时间和采取行动之后的时间是否有任何问题? 还有更好的选择吗?

try catch块的成本是多少?

好多了: if (condition) { try { //something } catch(SomeEx ex) {} } 而不是这个: try { if (condition) { //something } } catch(SomeEx ex) {} 当我进入try块时,JVM实际上做了什么? 编辑:我不想知道在第二个例子总是进去尝试…请回答这个问题。

在Java中阻塞队列有什么好处?

我正在开发一个项目,该项目使用一个队列来保存有关需要发送到远程主机的消息的信息。 在这种情况下,一个线程负责将信息放入队列,另一个线程负责从队列中获取信息并发送它。 第二个线程需要定期检查队列中的信息。 但后来我发现这是轮子的重新发明:)我可以使用阻塞队列来达到这个目的。 在上述应用程序中使用阻塞队列有哪些其他优点? (例如:性能,代码可修改,任何特殊技巧等)

Java最终局部变量存储在哪里?

采用以下示例: public void init() { final Environment env = new Environment(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { env.close(); } }); } 首先, env存储在哪里? 是吗: 由编译器复制到引用它的内部类的隐藏成员变量中 复制到堆上并在其上引用 留在堆栈上并以某种方式在那里引用 别的 我的猜测是第一个选择。 其次,执行这样做会产生任何性能问题(而不是简单地创建env作为类的成员变量并引用它),特别是如果要创建大量引用最终局部变量的内部类构造。

RESTful身份validation – 在高负载下导致性能不佳?

对于RESTful Web服务,我们说服务器不应存储任何状态。 现在,对于每个请求,“用户”必须经过身份validation,并且必须拥有他/她希望执行的操作的授权。 现在,每个请求都将包含该用户的授权数据。 这是我的困惑: 假设主页上有登录名和密码字段。 用户输入用户名/密码,该用户名/密码被发送回服务器,用户validation然后返回“某个令牌”。 现在,每个请求都会将此令牌发送到服务器。 问题(S): 后端数据库是否需要有一个单独的表来存储由用户名索引的这些令牌? 假设令牌存储在DB中,则每个请求都需要进行DB调用。 这是否会导致数据库服务器在高负载时成为瓶颈? 如果令牌没有真正存储在DB中,那么存储它的最佳“宁静”位置是什么? 有会议可能不安宁,但后来我没有看到如何扩展身份validation/授权(如上所述)? 如果它不是令牌,那么用户名/密码是否需要反向发送? (听起来像个坏主意:) 我可能误解了RESTful身份validation/授权的概念。 但实际情况是,对于每个http请求,“服务”需要访问数据库以validation凭据吗? 有什么东西可以简化这个过程并仍然坚持宁静的原则吗? 我可以想到有一个存储细节的缓存,并且在服务器重启的情况下,它只是让数据库之旅。 这只是一个可能使系统复杂化的性能优势(可能值得,不知道)。 这是唯一的解决方案吗? 因此,从REST的理论/概念角度(不是必要的实现)如何处理这个问题(如果它是一个问题)? 您的专业经验如何处理这个问题以及Restful是如何处理的? 我们正在研究Restlet + J2EE + MySQL Restful Web服务,我弹出这个问题,但没有令人满意的答案(谷歌,Stackoverflow等)我知道HTTP的基本和摘要授权,但我不熟悉根据上述说明,存储/检索的内部结构。

newFixedThreadPool与newSingleThreadExecutor的性能问题

我正在尝试对客户端代码进行基准测试。 所以我决定编写一个multithreading程序来对我的客户端代码进行基准测试。 我想测量下面方法需要多少time (95 Percentile) attributes = deClient.getDEAttributes(columnsList); 下面是我编写的用于对上述方法进行基准测试的multithreading代码。 我在两个场景中看到很多变化 – 1)首先,使用20 threads并running for 15 minutesmultithreading代码。 我得到95百分位数为37ms 。 我正在使用 – ExecutorService service = Executors.newFixedThreadPool(20); 2)但如果我使用以下方式运行同一个程序15 minutes – ExecutorService service = Executors.newSingleThreadExecutor(); 代替 ExecutorService service = Executors.newFixedThreadPool(20); 当我用newFixedThreadPool(20)运行我的代码时,我得到95百分位为7ms ,这比上面的数字小。 任何人都可以告诉我这样的高性能问题可能是什么原因 – newSingleThreadExecutor vs newFixedThreadPool(20) 通过这两种方式,我运行我的程序15 minutes 。 以下是我的代码 – public static void main(String[] args) { try […]

在Java Swing中设置特定组件的工具提示延迟时间

我正在尝试在JEditorPane上设置工具提示。 我用来确定要显示的工具提示文本的方法是CPU密集型的 – 所以我只想在鼠标停止很短的时间后显示它 – 比如1秒。 我知道我可以使用ToolTipManager.sharedInstance().setInitialDelay() ,但这会立即设置所有swing组件上工具提示的延迟时间,我不想这样做。

是否可以使用Hibernate或JPA Annotations限制@OneToMany集合的大小?

如果我使用JPA / Hibernate Annotations在POJO中有以下映射集合: @OneToMany(mappedBy = “columnName”, fetch = FetchType.LAZY) @OrderBy(“aField”) @MapKeyJoinColumn(name = “id_fk”) @LazyCollection(value = LazyCollectionOption.EXTRA) private Set collection = new HashSet(); 是否可以将加载的集合的大小限制为特定的数字n,或者将页面大小设置为延迟加载集合的前n个元素,而不从该类的其他实例加载所有项目或任何其他项目(例如@BatchSize)? 请注意,问题显式引用POJO映射,而不是使用Criteria或任何其他方式以编程方式限制显式查询中的大小。 我一直在寻找的可能解决方案是在Hibernate中找到SQL TOP语句的实现,希望作为注释或创建自定义CollectionPersister来修改生成的查询(尽管这需要在支持的方言中实现TOP语句)。

客户端最好的垃圾收集设置是什么?

最近的JVM有很多用于垃圾收集的XX参数(例如参见这里 ),但有哪些选项可以使客户端Swing应用程序真正表现更好? 我应该注意到,在客户端java应用程序中真正让我恼火的事情之一是停止世界垃圾收集的大延迟。 在Intelli-J IDEA中,我看到它需要三分钟或更长时间。 编辑:感谢所有的回复。 只是为了报告我使用此处设置的设置,为IDEA提供了CMS垃圾收集器(这是大多数读这个问题的人都熟悉的应用程序类型的一个很好的通用参考)。 我还设置-XX:+ StringCache以查看它是否会降低内存要求。 一般来说,观察是常规运行性能不会降低到可以注意到它的程度。 使用字符串缓存选项可以减少内存,但是CMS方法并不彻底,最终需要停止世界垃圾收集周期(回到三分钟等待)以清除内存(一次运行400MB)。 然而,考虑到内存占用减少,我可能只需要放置一个较小的最大内存量,这样可以使世界各地的大小更小。 IDEA 8.1.4附带JDK 1.6.0_12,所以我还没有测试G1。 此外,我的机器只有2个核心,因此G1方法不会真正最大化。 是时候打击老板换一台更好的机器了;)。