我有以下代码
public boolean matches(String word) {
Pattern p = Pattern.compile("\\w$");
Matcher m = p.matcher(word);
return m.find();
}
我想知道java编译器是否将Pattern.compile(“\ w $”)短语替换为对象,或者每次调用该函数时都创建该对象。
我怎样才能找到java对我的代码的影响?
是否有一个eclipse插件显示这个?
答案 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,但大多数资源都像对象创建或类调用一样容易。