当前位置: 首页 > 面试题库 >

通过将自己的应用程序类添加到classes.jsa来加速应用程序启动

哈扬
2023-03-14
问题内容

为了加快JVM的启动时间,Sun开发人员认为在JVM的安装过程中预编译平台的标准运行时类是一个好主意。这些预编译的类可以在以下位置找到:

$ JAVA_HOME \ jre \ bin \ client \ classes.jsa

我公司目前正在开发一个带有独立JRE的Java独立应用程序,因此,通过向此jsa文件中添加我们自己的应用程序类来加快我们的应用程序启动时间也是一个不错的选择。

我不相信JSA文件是由魔术创建的,因此:它是如何创建的?以及如何欺骗JVM合并我自己的类?

编辑 :我已经发现以下内容:

classes.jsa由命令创建

java -Xshare:dump

可以在中找到要合并到转储中的类的列表$JAVA_HOME/jre/lib/classlist

我什至设法在这里添加自己的类(并将它们添加到rt.jar中供Java查找它们),并在类列表文件下生成自己的校验和。

最终的问题是:似乎只能识别java,com.sun和org.w3c包中的类,如果我将相同的类保留在其原始包中,则不会加载它们。我在整个OpenJDK源代码中搜索了有关此内容的指针,但它似乎与保护域有关。如果有人对该主题足够感兴趣并且知识渊博,请给我添加一些建议以进一步调查。


问题答案:

从Java 8u40(和嵌入式Java
8u51)开始,Java现在支持应用程序类数据共享(AppCDS)(即,共享归档文件中您自己的类)。在嵌入式Java上,我们发现启动性能提高了40%以上!很棒,几乎没有我们做的工作…

https://blogs.oracle.com/thejavatutorials/entry/jdk_8u40_released



 类似资料:
  • 在我的昂首阔步的UI中,当我单击“试用”并执行一个请求时,请求是在没有任何令牌的情况下发送的。 问题--有什么方法可以查询登录请求并将授权令牌添加到Swagger UI请求中吗?

  • 我有一个建立在Spring启动基础上的后端,然后我学校的一些定制代码建立在这个基础上。前端是纯粹的角度应用程序,我从不同的服务器上通过一大口服务提供。他们只通过REST调用连接。 后端已经运行了一个身份验证模块,现在我需要从后端运行的同一tomcat服务器为这个角应用程序提供服务,这样它也可以使用这个身份验证模块。 我发现这是关于多个连接器的,所以我将其复制为以下类来设置多个连接器: 问题是我没有

  • Instagram最近改变了他们的API政策,允许开发者通过自己的应用程序将图片发布到Instagram平台。我们以前使用的几种其他技术来实现这一目标。其中之一是调用Instagram应用程序,该应用程序基本上可以打开Instagram并在那里进行共享。关于如何做到这一点的教程可以在这里看到:如何从你自己的iOS应用程序分享图像到Instagram 然而,有几个应用程序允许直接共享到Instagr

  • 本文向大家介绍Ubuntu中添加应用程序快速启动器的方法,包括了Ubuntu中添加应用程序快速启动器的方法的使用技巧和注意事项,需要的朋友参考一下 一些应用程序(例如很多.sh程序)如果想在Ubuntu中添加到Dash home中进行快速的启动,则需要找到/usr/share/applications这个目录,其中存放的全部是dash中的启动器,将你需要的程序xxx添加其中即可。具体操作步骤为:

  • 我在Kubernetes服务的默认命名空间上安装了一个python应用程序。它使用starlette\u exporter,并向Prometheus公开endpoint。当我访问endpoint时,我看到: 我还在库伯内特斯服务的命名空间上安装了。它没有自定义,我使用此命令进行安装: 要将我的应用程序指标添加到Prometheus堆栈中,我可以在Grafana仪表板上跟踪它们,有哪些必要步骤?据我

  • 我不知道如何让maven-shade-plugin将应用程序版本从POM文件包含到Manifest文件中。我找到了一些maven-jar-plugin的示例,建议包括 在插件配置部分(http://blog.soebes.de/blog/2014/01/02/version-information-into-your-appas-with-maven/)中。我为maven-shade-plugin