gpt4 book ai didi

java - 空 java 程序中的大对象

转载 作者:行者123 更新时间:2023-12-04 17:21:23 26 4
gpt4 key购买 nike

我分析了来自 Java 程序的简单堆转储,该程序在 main 方法中仅包含此内容。

public static void main(String[] args) throws IOException {
System.in.read();
}

使用 HPROF 解析器库,我的输出是:

Done, found:
Classes: 473
Instances: 13161
Namespace java
Classes: 251
Instances: 9033

怎么可能有这么多实例,而我却没有创建它们中的任何一个。这些是 Java 运行时实例吗?

最佳答案

JVM 在进入应用程序的 main 方法之前很久就开始执行 Java 字节码。 JVM Bootstrap 的重要部分是用 Java 编写的。特别是,这包括:

  • 创建标准的 Java I/O 流;
  • 填写系统属性;
  • 引导 JDK 模块层;
  • 系统类的静态初始化;
  • 初始化System ClassLoader并加载应用程序主类。

当然,这段初始化代码是用 Java 编写的,有时会分配 Java 对象。其中一些对象在 JVM 的整个生命周期内都保持 Activity 状态。

This answer描述了一种找出这些对象是什么以及它们分配在哪里的方法。

这是 JVM 引导期间分配的对象的可点击火焰图:

JDK bootstrap allocation Flame Graph

关于java - 空 java 程序中的大对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65962506/

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