日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...

發布時間:2023/12/10 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編典典

您可以使用MethodHandle。其Javadoc寫道:

使用Lookup API中的工廠方法,可以將Core Reflection

API對象表示的任何類成員轉換為行為等效的方法句柄。例如,可以使用Lookup.unreflect將反射方法轉換為方法句柄。生成的方法句柄通常提供對底層類成員的更直接和有效的訪問。

雖然這將減少開銷,但如果使用常規(非反射)字節代碼指令進行調用,則方法句柄仍會阻止JVM可以采用某些優化(此類方法內聯)。這種優化是否有益取決于您使用該方法的方式(如果該代碼路徑始終調用同一方法,則內聯可以提供幫助(如果每次都是不同的方法,則可能不會)。

以下微基準可以使您大致了解反射,方法句柄和直接調用的相對性能:

package tools.bench;

import java.lang.invoke.MethodHandle;

import java.lang.invoke.MethodHandles;

import java.lang.reflect.Method;

import java.math.BigDecimal;

public abstract class Bench {

final String name;

public Bench(String name) {

this.name = name;

}

abstract int run(int iterations) throws Throwable;

private BigDecimal time() {

try {

int nextI = 1;

int i;

long duration;

do {

i = nextI;

long start = System.nanoTime();

run(i);

duration = System.nanoTime() - start;

nextI = (i << 1) | 1;

} while (duration < 100000000 && nextI > 0);

return new BigDecimal((duration) * 1000 / i).movePointLeft(3);

} catch (Throwable e) {

throw new RuntimeException(e);

}

}

@Override

public String toString() {

return name + "\t" + time() + " ns";

}

static class C {

public Integer foo() {

return 1;

}

}

static final MethodHandle sfmh;

static {

try {

Method m = C.class.getMethod("foo");

sfmh = MethodHandles.lookup().unreflect(m);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public static void main(String[] args) throws Exception {

final C invocationTarget = new C();

final Method m = C.class.getMethod("foo");

final Method am = C.class.getMethod("foo");

am.setAccessible(true);

final MethodHandle mh = sfmh;

Bench[] marks = {

new Bench("reflective invocation (without setAccessible)") {

@Override int run(int iterations) throws Throwable {

int x = 0;

for (int i = 0; i < iterations; i++) {

x += (Integer) m.invoke(invocationTarget);

}

return x;

}

},

new Bench("reflective invocation (with setAccessible)") {

@Override int run(int iterations) throws Throwable {

int x = 0;

for (int i = 0; i < iterations; i++) {

x += (Integer) am.invoke(invocationTarget);

}

return x;

}

},

new Bench("methodhandle invocation") {

@Override int run(int iterations) throws Throwable {

int x = 0;

for (int i = 0; i < iterations; i++) {

x += (Integer) mh.invokeExact(invocationTarget);

}

return x;

}

},

new Bench("static final methodhandle invocation") {

@Override int run(int iterations) throws Throwable {

int x = 0;

for (int i = 0; i < iterations; i++) {

x += (Integer) sfmh.invokeExact(invocationTarget);

}

return x;

}

},

new Bench("direct invocation") {

@Override int run(int iterations) throws Throwable {

int x = 0;

for (int i = 0; i < iterations; i++) {

x += invocationTarget.foo();

}

return x;

}

},

};

for (Bench bm : marks) {

System.out.println(bm);

}

}

}

在我有些過時的筆記本上

java version "1.7.0_02"

Java(TM) SE Runtime Environment (build 1.7.0_02-b13)

Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing)

打印:

reflective invocation (without setAccessible) 568.506 ns

reflective invocation (with setAccessible) 42.377 ns

methodhandle invocation 27.461 ns

static final methodhandle invocation 9.402 ns

direct invocation 9.363 ns

更新:正如Irreputable所指出的那樣,服務器VM具有一些不同的性能特征,因此

,僅當您可以將MethodHandle放在靜態final字段中時 ,在 服務器VM中使用MethodHandle才有幫助

,在這種情況下,VM可以內聯調用:

reflective invocation (without setAccessible) 9.736 ns

reflective invocation (with setAccessible) 7.113 ns

methodhandle invocation 26.319 ns

static final methodhandle invocation 0.045 ns

direct invocation 0.044 ns

我建議您衡量您的特定用例。

2020-09-18

總結

以上是生活随笔為你收集整理的java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.久久色 | 男人天堂网在线视频 | 黑人巨大xxxxx性猛交 | 特级做a爰片毛片免费69 | 久久精精品久久久久噜噜 | 蜜桃视频一区 | 国产色视频网站 | 色呦呦一区 | 日韩欧美一区二区三区在线 | 午夜视频网址 | 亚洲第一黄色网址 | а√天堂8资源在线官网 | 日韩在线91 | 大地av| 黄毛片在线观看 | 国产视频一二区 | 久久婷婷色综合 | 免费看一级片 | 国产三级在线观看视频 | 中文字幕精品视频在线观看 | 亚洲综合网av | 又色又爽又黄无遮挡的免费视频 | 欧美大黄 | www.久久久久.com| 婷婷激情电影 | 国产女人呻吟高潮抽搐声 | 精品一区二区精品 | 成人另类小说 | 国产手机在线视频 | 免费午夜av | 精品久久久久久久免费人妻 | 超碰日日干| 日本a免费| 亚洲视频观看 | 97精品一区二区视频在线观看 | 亚洲av无码精品色午夜果冻不卡 | 女教师痴汉调教hd中字 | 色爽| 污污的视频在线观看 | 亚洲三级图片 | 毛片亚洲av无码精品国产午夜 | 亚洲欧美影院 | 天堂va蜜桃一区二区三区漫画版 | 中文字幕中出 | 国产毛片久久久久久 | 欧美精品亚洲 | 日本女优一区 | 蜜桃又黄又粗又爽av免 | 性色av一区二区三区在线观看 | 免费黄色资源 | 在线看黄色的网站 | 精品人妻一区二区三区久久夜夜嗨 | 亚洲国产精品成人va在线观看 | 91亚洲精品久久久蜜桃借种 | 日韩国产91 | 日本三级精品 | 一级a毛片免费观看久久精品 | 欧美性生活精品 | 国产精品成人网站 | 午夜片在线观看 | 国产又色又爽又黄 | 亚洲精品在线视频 | 欧美视频在线免费看 | 青娱乐国产 | 人妻互换一二三区激情视频 | 久久ww| 国产黄色在线网站 | 国产精品一区二区三区在线播放 | 欧色丰满女同hd | 爱情岛论坛亚洲自拍 | 一炮成瘾1v1高h | 2017天天干| 欧美国产日韩一区二区三区 | 亚洲人成一区 | 天天干天天操天天插 | 色一情一伦一子一伦一区 | 亚洲精品欧美在线 | 香蕉视频一区二区三区 | 韩国三级视频在线 | 91成人免费在线视频 | 五月婷影院 | 99综合色 | 色丁香综合 | 亚洲男人的天堂在线视频 | 999免费视频 | 黄在线视频| 激情九月天 | 久草福利资源在线观看 | 91丨国产丨捆绑调教 | av在线播放地址 | 国产精品国产一区二区三区四区 | 精品国产一区二区三区四区 | 放荡闺蜜高h季红豆h | 可以在线观看的av网站 | 一级毛片aa | 好爽快一点高潮了 | 秋霞成人午夜鲁丝一区二区三区 | 日韩的一区二区 | 欧美日韩免费一区 |