jvm graalvm编译器创建的本地可执行文件是否包括内存管理和GC?

jecbmhm3  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(92)

我一直在探索graalvm,但找不到答案。由于graalvm编译器创建的本机可执行文件可以在任何没有Graalvm或JVM的VM上运行,那么内存管理和GC是如何处理的?graalvm编译器创建的本机可执行文件是否包括内存管理,GC和运行时所需的其他东西?
在文档中找不到对此的明确解释

z0qdvdin

z0qdvdin1#

是的,GC也可以在native-image打包的应用程序中工作。这在文档的Memory Management部分有解释。
GC仍然会管理应用程序创建的对象。但是,native-image可能会执行优化,以便在堆栈上分配一些对象,或者在不再需要它们时立即释放它们(如果它能够检测到这一点)。
您甚至可以使用native-image--gc参数选择GC。您可以使用以下GC:

*串行GC:此GC占用空间最小,但仅使用单个线程进行垃圾收集,并且在此期间可能会暂停应用程序。它也是具有小堆大小的普通Java应用程序(非本机映像)的默认GC,并且是使用native-image打包的应用程序的默认GC。
*G1:G1 GC优化了吞吐量,使用多个线程,暂停时间比串行GC短。它是堆大小不小的普通Java应用程序(非本机映像)的默认GC。此GC仅在使用Oracle GraalVM时可用,不适用于GraalVM Community Edition。
****Epperly GC不做任何垃圾收集。如果内存已满,应用程序将崩溃。如果您有不需要任何垃圾收集的小脚本,或者有一个可以定期重启以避免GC暂停或类似情况的实时应用程序,这对于测试可能很有用。

还有一些工作是让ZGC在本机映像上可用。

相关问题