經過一番進一步的思考,我相信你要求什麼可能可能(也許!)在技術上是可能的;但需要很多努力;但在概念上這不是一個好方法。
我假設您的要求實際上要儀器任何種類的應用程序,以便通過做「封面並行化下的」以提高其性能在你扔的。
所以,而不是一個真正的解決方案,我主要是有顧慮的列表:
- 首先,如果你連想修改已經觸發當前執行方法,你不僅在談論儀表。你真正想要做的是提供你自己的「JIT」機制 - 而JVM JIT也在那裏,並且正在做它的工作。
- 所以,如果你真的認真對待這件事,並且希望確保即使是任何
main()
中的內容都可以從您的優化中受益 - 那麼我認爲,從概念上講,您可以更好地設計和實現您自己的JVM。
- 然後,我想知道:你說要覆蓋
main()
已經運行「長時間循環」的方法。這聽起來像你打算通過丟棄你的儀器來修復壞設計。我認爲更理智的做法是:看看這樣的應用程序,並且改進他們的設計。
- 從某種意義上說:如果任意應用程序的「並行化」將是「那麼容易」 - 它將成爲JVM的一部分。而事實並非如此。並且JVM不會進行這種優化是有原因的:它可能是超級難以獲得正確和健壯的。
換句話說:我猜你有一個XY問題;而X問題是你正在處理的應用程序可以從「並行化」中受益。但這是「一般」很難做到的事情。
從這個意義上說,我寧願定義某種架構(可能包含特定的,明確定義的應用程序應該如何「啓動」的步驟;以便您的儀器可以成功完成其工作),並首先獲得該方法的經驗。意思是:告訴你的人不要把「長時間運行的循環」置於他們的main()
(如上所述;這對我來說聽起來像是非常糟糕的設計!)。
我沒有得到:鑑於這樣一種方法將永遠不會**的事實;有什麼意義呢?我的意思是:當這種方法稍後被調用時,不是用來給你「洞察力」的工具;像何時調用該方法? – GhostCat
就**性能測試**而言,您是正確的。我正在使用我的代碼來並行化一個方法中長時間運行的循環。所以如果你在'main'中有一個乏味的循環,我想用它來產生一些線程並加入em(如果它是可並行化的)。這就是爲什麼我遇到了檢測單個調用函數的原因。 –
你看過javaagent嗎? –