gpt4 book ai didi

java - 为什么我的 Oracle JVM 会为一个简单的 'Hello World' 程序创建所有这些对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:47 25 4
gpt4 key购买 nike

我在玩弄 jmap,发现简单的“Hello World”Java 程序创建了数千个对象。以下是 Oracle JVM update 131 在启动时创建的对象的截断列表:

 num     #instances         #bytes  class name
----------------------------------------------
1: 402 4903520 [I
2: 1621 158344 [C
3: 455 52056 java.lang.Class
4: 194 49728 [B
5: 1263 30312 java.lang.String
6: 515 26088 [Ljava.lang.Object;
7: 115 8280 java.lang.reflect.Field
8: 258 4128 java.lang.Integer
9: 94 3760 java.lang.ref.SoftReference
10: 116 3712 java.util.Hashtable$Entry
11: 126 3024 java.lang.StringBuilder
12: 8 3008 java.lang.Thread
13: 74 2576 [Ljava.lang.String;
14: 61 1952 java.io.File
15: 38 1824 sun.util.locale.LocaleObjectCache$CacheEntry
16: 12 1760 [Ljava.util.Hashtable$Entry;
17: 53 1696 java.util.concurrent.ConcurrentHashMap$Node
18: 23 1472 java.net.URL
19: 14 1120 [S
20: 2 1064 [Ljava.lang.invoke.MethodHandle;
21: 1 1040 [Ljava.lang.Integer;
22: 26 1040 java.io.ObjectStreamField
23: 12 1024 [Ljava.util.HashMap$Node;
24: 30 960 java.util.HashMap$Node
25: 20 800 sun.util.locale.BaseLocale$Key

我知道 JVM 从 JAR 文件加载类并期望看到 java.lang.Classjava.lang.String[Ljava.lang .对象。 258 java.lang.Integer 对象对我来说也很清楚:这是 Integer 缓存。

但是 java.lang.reflect.Field 呢? 哈希表?许多 StringBuilderjava.util.concurrent.ConcurrentHashMap?这是从哪里来的?

程序非常简单:

public class Test {
public static void main(String[] args) throws IOException {
System.out.println("Hello world");
System.in.read();
}
}

JVM 详细信息:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Ubuntu 16.04。

最佳答案

您可以通过使用 -XX:+TraceBytecodes 标志运行应用程序自己找到答案。
此标志在 debug builds of HotSpot JVM 中可用.

这是详细的火焰图(可点击的 SVG),显示了分配对象的来源堆栈跟踪。

JDK start-up allocation

就我而言,启动分配的主要来源是

  • URLClassLoader 和扩展类加载器
  • 区域缓存
  • UsageTrackerClient
  • MetaIndex registry
  • 系统属性
  • 字符集初始化

附言The script用于生成 Flame Graph来自 TraceBytecodes 输出。

关于java - 为什么我的 Oracle JVM 会为一个简单的 'Hello World' 程序创建所有这些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333286/

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