1 回答

TA貢獻1995條經驗 獲得超2個贊
您看到的內存使用情況是 JVM 本身用來維持其工作的。如果您-verbose在運行應用程序時提供選項,您將看到許多類被加載到元空間中:
(在我的 JVM 上加載的類)
[Loaded java.lang.Object from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.String from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.reflect.Type from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.Class from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.Cloneable from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.ClassLoader from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.System from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
[Loaded java.lang.Throwable from C:\Program Files\Java\jdk1.8.0_45\jre\lib\rt.jar]
...
and many many more
它們具有靜態字段,其中的對象在堆中分配,這些對象消耗內存。
并且不要忘記內部 JVM 服務,例如 GC、JMX 和 RMI,它們也可以隱式實例化并消耗一些內存。
PS 如果您想獲取更多關于到底加載到堆中的內容以及每個對象消耗多少內存的信息,您可以使用任何分析實用程序(例如 VisualVM)檢查 JVM 堆轉儲。
添加回答
舉報