在java中是否有内联函数的概念,或者它取代了其他东西?如果有,它是如何使用的?我听说public,static而final方法是内联函数.我们可以创建自己的内联函数吗?
出于日志记录的目的,我创建了一个方法logTitle(),它打印出TestNG测试的调用方法名称.示例代码如下.
@Test
public void test1() throws Exception {
method1();
}
public static void method1() throws Exception {
Utils.logTitle(2);
}
Run Code Online (Sandbox Code Playgroud)
...
public static void logTitle(Integer level) throws Exception {
// Gets calling method name
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
// This would get current method name
switch (level) {
case 1:
logger.info("=======================================================");
logger.info(method);
logger.info("=======================================================");
break;
case 2:
logger.info("------------------------------------");
logger.info(method);
logger.info("------------------------------------");
break;
case 3:
logger.info("---------------------");
logger.info(method);
logger.info("---------------------");
break;
case 4:
logger.info("--------- " + method + " ------------");
break;
default:
logger.info(method);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我在两台不同的机器上获得了不同的logTitle()结果. …
任何人都可以告诉我,Hotspot或Dalvik是否足够聪明,可以内联调用返回常量(静态最终)int值的final方法?理想情况下,方法调用将被常量替换.这可能是在类加载时或通过JIT.
这对我正在研究的一些代码的设计有影响.
假设您有一个相当长的方法,其中包含大约 200 行对时间非常敏感的代码。将代码的某些部分提取到单独的方法中是否可能会减慢执行速度?
java ×4
android ×1
dalvik ×1
inline-code ×1
jit ×1
jvm-hotspot ×1
performance ×1
refactoring ×1
testng ×1