2010-04-14 33 views

回答

3

取決於實施。一般來說,你不應該在Java中擔心這樣的事情。 「虛擬機」的整個概念就是將這樣的事情抽象出來。現在我假設函數存儲在接近字節碼的地方,但是如果你的虛擬機支持JIT,那麼它們可能在任何地方......

我想我們可以說「在堆上」......大聲笑

說實話,我想不出你需要知道這一點的一個原因,並想到你可能會試圖用它來嚇唬我。

+0

我認爲@husain希望知道類/靜態函數和實例函數之間的區別 – Yaneeve 2010-04-14 16:05:49

+1

在這種情況下,它們存儲在相同的位置。如果函數包含的數據是靜態的或實例類,則可能會分配不同的數據,但「函數」本身(即函數中包含的代碼)不會被複制。 – 2010-04-14 16:08:19

3

JVM規範暗示它是堆的一部分:

3.5.4方法區域

Java虛擬機具有被所有Java 虛擬機線程之間共享的方法 區域。方法 區域類似於存儲區域 ,用於傳統 語言的編譯代碼或類似於UNIX進程中的「文本」 段。它存儲 每個類結構,如運行時 常量池,字段和方法 數據,和用於方法 和構造方法的代碼,其中包括(§3.9)在 類中使用的特殊 方法和實例初始化和 接口類型初始化。方法區域 在虛擬 機器啓動時創建。雖然方法 區域在邏輯上是堆的一部分,但是簡單的實現可以選擇不是 來垃圾收集或者是緊湊的 它。此版本的Java虛擬機器規範並未強制要求 方法區域的位置或用於管理編譯代碼的策略 。 方法區域可以是固定尺寸 或者可以按照 計算的要求進行擴展,並且如果不需要更大方法區域變得 ,則方法區域可以被收縮。方法 區域的內存不需要連續。

參考:The JavaTM Virtual Machine Specification

相關問題