簡體   English   中英

如何使用長內存地址調用Java方法?

[英]How would I invoke a Java method using a long memory address?

可以說我有一個在Java中很長的內存地址,如果我知道該內存地址是一個函數指針,那么如何在該地址處調用函數?

我對此感興趣的原因是用於處理堆外對象。 我要在直接字節緩沖區中創建對象,而這些對象不會受到GC的限制。 這將使我可以取消GC暫停時間,因為如果我不在堆上創建任何對象,GC將永遠不會運行。

在純Java中,您不會。 它與Java的許多功能恰恰相反。 如果您確實願意,可以使用JNI 理想情況下,您應該更改設計,以使您不必這樣做-在大多數情況下,這是一個很奇怪的要求。

現在,您已經編輯了帖子,並且看來您基本上想要做的比VM的垃圾收集器更好,我強烈建議您避免這種情況。 這可能需要花費大量的精力,並且會導致系統非常脆弱,需要為每個環境使用不同的二進制文件。 無論如何,您都很難將堆中的值用作真實對象 ,因為那時JVM可能會對數據做出各種假設。 如果您只關心原始值,則始終可以使用一個大字節數組來充當“原始”存儲,並使用適當的包裝器代碼在該數組中的數據和原始值之間進行轉換...全部都不需要JNI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM