[英]Does JVM stores complete bytecode in its memory?
正如我對SO問題的回答中所提到的那樣, permgen
空間具有方法的字節碼。
java類具有什么? 其字段或方法(也為構造方法) 。 方法是構成代碼主要部分的部分。
我真的很困惑,為什么將幾乎完整的.class
文件(字節碼)加載到JVM的內存中(如果為true)。
有人可以澄清嗎?
JVM將整個類加載到內存中,因為它構成了單個可執行單元。 在本機環境中,整個可執行文件(例如.exe)被加載,或者整個動態庫(.dll,.so,.dynlib)作為一個單元加載到內存中。 與此相比,Java實際上更加有效,因為僅加載了另一個執行類直接引用的類。
例如:
class A {
public A() {
}
}
class B {
public void method1() {
// do something
}
public void method2() {
A a = new A();
}
}
即使加載了類B,並且即使類B引用了類A,但JVM也不會加載類A。 如果 B.method2()
,則只有在那時JVM才會解析類A。
加載類后,“卸載”的唯一方法是丟棄執行加載的ClassLoader。 即便如此,與許多其他語言和運行時相比,這在運行時提供了更大的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.