我们有一个应用程序通过拆分数据并对其进行排序来导入大量文件.运行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
Run Code Online (Sandbox Code Playgroud)
我在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 = new FileSystemXmlApplicationContext(args[0]);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendMinutes()
.appendSuffix("minute", "minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix("second", "seconds")
.toFormatter();
URI output = (URI) applicationContext.getBean("workingDirectory");
File dir = …Run Code Online (Sandbox Code Playgroud) 我正在通过服务器jre,当我提取serverjre tar.gz时,它给了我jdk文件夹.为什么serverJRE给JDK这样的文件夹.serverJRE里面还有JRE文件夹.那么使用哪一个,整个serverJRE或者只是在serverJRE里面的JRE文件夹.ServerJRE中的JRE内容与JDK中的JRE相同.
我不明白这种差异.
我正在我的Core i7笔记本电脑上运行一个Java程序,它有8个核心(4个物理,4个HT).该程序使用8个并行线程,因此它应该耗尽所有CPU.使用'-server'参数运行时,它始终为100%.如果没有它,它总体上大约在50%-60%之间(总是在100%的峰值和30%的下降时变化).这就是我觉得奇怪的事情:当我在调试中运行程序并等待CPU使用率特别低(30%)然后暂停执行以查看八个线程正在做什么时,它们都没有处于阻塞状态.而且,它们之间几乎没有同步.这就是我想知道的:
编辑:这是一个想法:代码分配大数组并很快将它们留给GC.调用'new SomethingBig()'并分配该内存需要时间时线程是否会休眠?如果VM处理一组线程的分配中有一个进程,我想这可以解释为什么它们似乎在同步块之外随机暂停......
编辑2:我很确定它是由GC引起的.如果我给VM 1500Mb而不是默认的500Mb,则CPU再次达到100%.我认为在服务器模式下不会发生减速,因为它默认使用更多内存.
在进行java代码的性能测试时,您需要测试JIT编译的代码,而不是原始的字节码.要使字节码被编译,必须通过多次执行代码来触发编译,并且还允许后台线程有足够的产生时间来完成编译.
我正在寻找一个可以安全应用于任何现代操作系统的门槛,比如Mac OS或Windows用于开发环境,Linux用于CI /生产.
我已经看到参数"-server"用作java.exe的命令行参数:
java.exe -server MyClass
但无论我在互联网上搜索多么努力,我都没有找到关于它究竟是什么的文件.谁能解释一下?
我改进了代码,以便从垃圾收集器获得更好的结果。
现在,当我调用它时,System.gc()它会释放所有内存。但是,当我在不调用应用程序的情况下观察内存使用情况时,System.gc()确实会保留并使用越来越多的内存。
这是否意味着我的改进正在发挥作用,并且我的所有参考资料都是正确的,并且我可以忽略 JVM 如何自行释放内存。或者我的代码中是否存在其他问题,这就是 JVM 在不运行垃圾收集器的情况下保留更多内存的原因。
我正在Windows 8.1 64bit上开发java swing应用程序,带有4GB RAM,JDK版本为8u20 64bit.
问题是当我使用带有Monitor选项的Netbeans Profiler启动应用程序时.
加载第一个Jframe时,应用程序内存堆约为18mb,JVM进程大小约为50mb(image1).
然后当我启动包含带有webView的JFxPanel的其他Jframe时,Heap跳转到45mb并且JVM 进程非常快地跳到700mb(image2),这非常令人困惑.然后,当我关闭第二个JFrame并且它被释放并调用System.gc()并且JVM执行GC(在大多数情况下)时,堆降低到大约20mb,但JVM进程从不丢弃(image3).
为什么内存堆(45 Mb)和JVM进程(699 Mb)之间存在巨大差异?为什么JVM需要所有内存?以及如何减少这个数额?我正在使用这些vm选项启动应用程序:
-Xms10m -Xmx60m -Xss192k
-XX:+UseG1GC -XX:MinHeapFreeRatio=5
-XX:MaxHeapFreeRatio=10 -XX:PermSize=20m
-XX:MaxPermSize=32m
Run Code Online (Sandbox Code Playgroud)
编辑: -我刚刚读到该链接JVM内存使用失控的问题,他有同样的问题,但情况不同他的堆大小是JVM进程内存总大小的33%,在我的情况下小于7 %,他同时做多个工作(Tomcat webapp),我没有(java swing应用程序),他没有使用我所做的相同VM参数启动他的应用程序.
更新: - 在第一个JFrame启动后(image1)

第二个JFrame启动后(image2)

第二个JFrame关闭后(image3)

编辑2: - 我刚刚使用上面相同的VM参数尝试了相同的应用程序并添加了
-client
-XX:+UseCompressedOops
Run Code Online (Sandbox Code Playgroud)
并且使用了JDK 8u25 32位,因为如本答案/sf/answers/1083005381/中所述,64位版本不包含JRE中的客户端文件夹,并将忽略-client参数.
结果是当第二个JFrame打开时,总内存进程跳转到540Mb,并且堆大小(在三个点中)与64位版本中的数量几乎相同,这是否确认这是一个与问题相关的问题到JVM(相同的堆大小和总进程大小的260Mb差异)?
我正在使用VMware使用ubuntu我已经安装了hadoop单节点集群.然后我安装了zookeeper并运行了zookeeper.然后,当我运行我的"Apache kafka"时,它会抛出一个错误.
无法识别的VM选项'+ UseCompressedOops'
无法创建Java虚拟机
单个@ ubuntu:〜/ yoga/zookeeper-3.4.5/bin $ ./zkServer.sh启动
默认情况下启用JMX
使用config:/home/single/yoga/zookeeper-3.4.5/bin/../conf/zoo.cfg
开始动物园管理员......开始了
single @ ubuntu:〜/ yoga/kafka_2.8.0-0.8.0 $ bin/kafka-server-start.sh config/server.properties
无法识别的VM选项'+ UseCompressedOops'
无法创建Java虚拟机.
我已经通过catalina中的catalina.sh中的JAVA_OPTS放置了JVM选项.但是,系统不会选择这些选项 - 我试图通过分析信息来设置项目属性和日志文件的路径.我必须在私有实例的bin中设置setenv.sh中的选项.甚至我在catalina.sh中查看JAVA_OPTS的echo命令也没有得到打印 - 默认值如CATALINA_BASE等.打印出来.catalina.sh甚至被处理了吗?
在一天结束时,我的系统可以正常使用setenv.sh.我很好奇为什么JAVA_OPTS没有被catalina.sh接收.
我正在使用安装了TOMCAT 7的Ubuntu 12.04和JDK 1.7.
谢谢