为了改进应用程序的启动,我们使用Java的类数据共享(CDS)功能。当前,它非常有效,因为我们加载了很多类,尤其是在应用程序的开始阶段。
前提条件:
我们在具有CFS的Linux上运行
在设备/应用程序启动期间,存在cpu / io竞争情况
我们在应用程序中有几个测量点,它们会触发一个事件,以表示某些功能已正确加载。
创建包含7_000个已加载类列表的CDS存档
创建包含9_000个已加载类列表的CDS存档
结果:
使用已加载7_000个类的存档时,到达第一点平均需要14秒。 50秒后将达到秒。
当使用归档了9_000个已加载类的归档文件时,将在15秒(平均/ 1秒回归)后到达第一个点。第二次测量将加快7秒。
问题: 第一个事件的一秒钟回归
我理解为什么第二点会更快达到。这是因为许多类将放置在CDS归档中,并且在类加载时不需要任何链接,验证等。但是我不明白为什么与具有7_000类的档案相比,第一点将遭受一秒钟的回归。
什么原因可能导致回归?
假设