gpt4 book ai didi

java - jdk 8 运行空主函数,为什么 PSYoungGen 已经使用了大约 1000k 空间

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:37 25 4
gpt4 key购买 nike

当我运行一个空的 main 函数并打印 gc 详细信息时,但是看到 PSYoungGen 使用了大约 1000k 空间,我没有分配任何对象,为什么它已经使用了大约 1000k 空间?代码如下:

public class Test {
public static void main(String[] args) {

}
}

GC详情如下(可以看到使用过的1374K):

Heap
PSYoungGen total 2048K, used 1374K [0x00000007bfd80000, 0x00000007c0000000, 0x00000007c0000000)
eden space 1536K, 89% used [0x00000007bfd80000,0x00000007bfed7ba0,0x00000007bff00000)
from space 512K, 0% used [0x00000007bff80000,0x00000007bff80000,0x00000007c0000000)
to space 512K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007bff80000)
ParOldGen total 5632K, used 0K [0x00000007bf800000, 0x00000007bfd80000, 0x00000007bfd80000)
object space 5632K, 0% used [0x00000007bf800000,0x00000007bf800000,0x00000007bfd80000)
Metaspace used 2914K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 319K, capacity 388K, committed 512K, reserved 1048576K

vm 选项如下:

-Xms8m -Xmx8m -XX:+PrintGCDetails

最佳答案

您看到的内存使用情况是 JVM 本身用来维持其工作的。如果您在运行应用程序时提供 -verbose 选项,您将看到许多类被加载到 Metaspace 中:

(加载到我的 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,它们也可以隐式实例化并消耗一些内存。

附言如果您想获得更多关于究竟什么被加载到堆中以及每个对象消耗多少内存的信息,您可以使用任何分析实用程序检查您的 JVM 堆转储,例如 VisualVM .

关于java - jdk 8 运行空主函数,为什么 PSYoungGen 已经使用了大约 1000k 空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com