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 堆转储。
添加回答
举报