Tag: 性能

如何衡量Java开发中的性能

是否有任何工具可以测量每个函数调用的执行时间,并找出给定的开发java j2se项目的瓶颈? 谢谢!

case-statement或if-statement效率透视

可能重复: “else if”是否比“switch()case”更快? Java中if / else与switch语句的相对性能差异是什么? 我知道case语句可以用跳转表来实现。 这是否比if语句更有效? 这只是微观优化应该避免吗?

性能测试Flex应用程序

使用BlazeDS / Java服务器后端程序对Flex应用程序进行性能测试的最佳方法是什么? 我们正在研究JMeter,但它是否可以在更复杂的级别上与amf协议一起使用,其中请求中的值可以被操纵?

使用UseConcMarkSweepGC减少JVM暂停时间> 1秒

我在一台具有16Gb RAM,8核处理器和Java 1.6的机器上运行内存密集型应用程序,所有这些都运行在CentOS 5.2版(最终版)上。 精确的JVM详细信息是: java version “1.6.0_10” Java(TM) SE Runtime Environment (build 1.6.0_10-b33) Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode) 我正在使用以下命令行选项启动应用程序: java -XX:+UseConcMarkSweepGC -verbose:gc -server -Xmx10g -Xms10g … 我的应用程序公开了一个JSON-RPC API,我的目标是在25ms内响应请求。 不幸的是,我看到延迟超过1秒,似乎是垃圾收集造成的。 以下是一些较长的例子: [GC 4592788K->4462162K(10468736K), 1.3606660 secs] [GC 5881547K->5768559K(10468736K), 1.2559860 secs] [GC 6045823K->5914115K(10468736K), 1.3250050 secs] 这些垃圾收集事件中的每一个都伴随着延迟的API响应,其持续时间与所示的垃圾收集的长度非常相似(在几毫秒内)。 以下是一些典型示例(这些示例均在几秒钟内生成): [GC 3373764K->3336654K(10468736K), 0.6677560 secs] [GC 3472974K->3427592K(10468736K), […]

使用Runtime.exec()生成的进程的高效执行和输出流重定向

我有一个脚本,它执行多次程序,为STDERR和STDOUT产生大约350行输出。 现在,我需要在Java中执行脚本,从而将输出流打印到其原始目标。 所以,基本上,我从Java类中执行脚本,维护用户的原始行为。 我这样做的方式受到了诸如从java Runtime.exec读取流的建议的启发,并且在function上,工作正常。 Process p = Runtime.getRuntime().exec(cmdarray); new Thread(new ProcessInputStreamHandler(p.getInputStream(), System.out)).start(); new Thread(new ProcessInputStreamHandler(p.getErrorStream(), System.err)).start(); return p.waitFor(); 而ProcessInputStreamHandler类: class ProcessInputStreamHandler implements Runnable { private BufferedReader in_reader; private PrintStream out_stream; public ProcessInputStreamHandler(final InputStream in_stream, final PrintStream out_stream) { this.in_reader = new BufferedReader(new InputStreamReader(in_stream)); this.out_stream = out_stream; } @Override public void run() { String line; […]

x * x vs Math.pow(x,2)java性能

我已经做了一些关于x * x或Math.pow(x,2)在Java中是否更快的测试。 我期待简单的x * x有点快,但事实certificate它的速度相当快。 有人可以开导我,请问这有可能吗?

自动装箱的性能影响

通常,编译器会生成执行装箱和拆箱的代码。 但是如果不需要盒装值,编译器会是什么? (Oracle标准)编译器是否足够智能以优化它? 看看这个方法: public static void requireInRange(int index, Object[] array) { if(index = array.length) throw new IndexOutOfBoundsException(); } 唯一相关的信息是array.length ,因此例如,将数组的每个值包装起来是没用的。 喜欢这段代码: int[] anArray = {3, 4, 2}; requireInRange(3, anArray); 编译器是否会实际插入用于装箱数组的每个值的代码?

Java循环效率(“for”与“foreach”)

(对于那些熟悉JVM编译和优化技巧的人来说一个问题…… 🙂 是否有任何“for”和“foreach”模式明显优于其他模式? 考虑以下两个例子: public void forLoop(String[] text) { if (text != null) { for (int i=0; i<text.length; i++) { // Do something with text[i] } } } public void foreachLoop(String[] text) { if (text != null) { for (String s : text) { // Do something with s, exactly as with text[i] } } […]

一些运行/ JIT的故障后Java循环变慢了?

所以我想对一些基本的javafunction进行基准测试,以便为这个问题添加一些信息: 将方法声明为静态会带来什么好处 。 我知道写作基准有时并不容易,但这里发生的事情我无法解释。 请注意,我并没有考虑如何解决这个问题,而是为什么会发生这种情况* 测试类: public class TestPerformanceOfStaticVsDynamicCalls { private static final long RUNS = 1_000_000_000L; public static void main( String [] args ){ new TestPerformanceOfStaticVsDynamicCalls().run(); } private void run(){ long r=0; long start, end; for( int loop = 0; loop<10; loop++ ){ // Benchmark start = System.currentTimeMillis(); for( long i = 0; i […]

正则表达式太慢了吗? 现实生活中的例子,简单的非正则表达式替代方案更好

我见过这里的人发表过像“正则表达式太慢了!”这样的评论,或者“你为什么要用正则表达式做一些简单的事情!” (然后提出10+行代替)等。 我还没有真正在工业环境中使用正则表达式,所以我很好奇是否有正则表达式显然太慢的应用程序, 并且存在一个简单的非正则表达式替代方案,其表现更好(甚至可能渐近!)更好。 显然,许多使用复杂字符串算法的高度专业化的字符串操作将轻松胜过正则表达式,但我所说的是存在简单解决方案且明显优于正则表达式的情况。 当然,重要的是主观的,但我认为合理的标准是,如果它只使用String , StringBuilder等,那么它可能很简单。 注意 :我非常感谢能够certificate以下内容的答案: 一个初学者级的正则表达式解决方案,解决非玩具现实生活中可怕的问题 简单的非正则表达式解决方案 专家级正则表达式重写,表现相当