我怎样才能看出Java做了哪些优化

时间:2013-05-09 12:44:50

标签: java performance

我有以下代码

 public boolean matches(String word) {

     Pattern p = Pattern.compile("\\w$");
     Matcher m = p.matcher(word);
     return m.find();

 }

我想知道java编译器是否将Pattern.compile(“\ w $”)短语替换为对象,或者每次调用该函数时都创建该对象。

我怎样才能找到java对我的代码的影响?
是否有一个eclipse插件显示这个?

5 个答案:

答案 0 :(得分:1)

根据源代码,每次调用函数时都会创建对象。

public static Pattern compile(String regex) {
    return new Pattern(regex, 0);
}

答案 1 :(得分:1)

Java编译器只会针对invokestatic发出java.util.regex.Pattern.compile字节码指令。事实上,这个方法将返回一个Pattern对象,您的代码随后可以使用它。

因此,Pattern.compile的源代码中提供了您真正想知道的内容。如果该方法只返回一个新的Pattern对象,则将来不会重用。如果您看到该对象正在被缓存,那么将会发生一些重用。

请看一下您感兴趣的Java版本的源代码。

答案 2 :(得分:0)

compile方法创建新对象Pattern,稍后会重复使用。

来自源代码:

public static Pattern compile(String regex, int flags) {
    return new Pattern(regex, flags);
}

答案 3 :(得分:0)

要查看编译器完成的优化,您可以按照以下步骤操作:

1)编译你的程序

2)使用可用的java反编译器(可以在google中检入)反编译您的程序以再次生成源代码

3)将您的来源与反编译的来源进行比较。

那会给你足够的想法...

因为反编译器不那么聪明(也没有必要)。

查看运行时优化要困难得多。

答案 4 :(得分:0)

你只知道你是否看过Java Bytecode生成的正弦Java已经有很多优化。

对于Eclipse,我知道Bytecode Outline plugin直接从eclipse显示字节码。也许你需要搜索一些资源如何读取bytecolde,但大多数资源都像对象创建或类调用一样容易。

相关问题