類型提示可以大大改善反射發生多次的執行時間。我對類型提示的理解是,它只允許編譯器緩存反射查找。該緩存是否可以動態地發生?或者是否有某些原因會導致這種情況不好/不可能?Clojure中的Java反射可以被記憶嗎?
4
A
回答
6
這些警告表明,Clojure的有沒有辦法知道 C的類型。你可以提供一個類型提示解決此問題,使用元數據的語法
^Class
:
(defn describe-class [#^Class c]
{:name (.getName c)
:final (java.lang.reflect.Modifier/isFinal (.getModifiers c))})
有了類型提示,反射警告將消失。編譯的Clojure代碼將與編譯的Java代碼完全相同。 此外,嘗試使用除類 以外的其他名稱調用describe-class將失敗並出現ClassCastException。
所以總結一下,反射投射不僅僅是緩存它被消除。
3
豐富還跟賜教: 「對於JDK適當真正的答案是JSR 292,在invokedynamic
指令,它允許調用點緩存的正常結構與性能要好得多 比memoizaton」
相關問題
- 1. java中的記憶遊戲
- 2. 每個USB記憶棒可以變成可啓動的USB嗎?
- 3. Java:'終身'記憶和permgen一樣嗎?
- 4. Winform程序如此簡單 - 但我可以回憶我的記憶嗎?
- 5. 我如何標記一個Clojure函數,以便我可以用Java反射識別它
- 6. 記憶化在Java中
- 7. 我可以在Clojure記錄中創建可變狀態嗎?
- 8. 請教我記憶「斜槓」與「反斜槓」的好記憶
- 9. Java:自動記憶
- 10. 我可以使用java反射API更改類成員嗎?
- 11. 記憶遊戲的Java
- 12. Java中的反射
- 13. 可以在實現可分段接口的對象上使用java反射嗎?
- 14. F#會自動記憶嗎?
- 15. Java Swing中的衝突記憶
- 16. 反射可以提取特徵中使用的初始值嗎?
- 17. 基本記憶遊戲Java
- 18. 可以做一些關於「Item」反射類的可見性嗎?
- 19. 有人可以解釋我的記憶池中有什麼問題嗎?
- 20. 可以通過Java反射在Spring中更改Annotated Tractional屬性嗎?
- 21. Haskell中的記憶?
- 22. C++中的記憶
- 23. 我可以在clojure 1.2 master分支中使用swank-clojure嗎?
- 24. Java的Swing真的是一個「記憶豬」嗎?
- 25. 我可以使用反射發現Java類聲明的內部類嗎?
- 26. 反應:是否需要手動記憶?
- 27. 從記錄模式映射Clojure中
- 28. 在java中的反射
- 29. 在java中的反射?
- 30. 在硒中的java反射
感謝您糾正我對錯誤理解類型提示的工作方式。我仍然覺得關於緩存反射的更大問題沒有得到答覆,但是會接受這一點,即儘可能不要直截了當。 – 2009-09-28 06:57:16