有没有办法摆脱加载的clojure类?

有没有办法摆脱加载的clojure类?,clojure,Clojure,在运行时,下面创建了一组类,这些类将被加载 (dotimes [i 1000000] (eval `(fn [] (+ ~i 10)))) 可以通过连接到visualvm来检查对象: 在某些时候,vm决定卸载对象,但这是相当随意的。当装载100k而不是500k时,有没有办法卸载这些对象?考虑一下为什么要丢弃它们。只是躺在那里,他们除了消耗内存之外什么都不做,所以我想你应该减少内存占用。所以,告诉JVM这一点。我不是JVM标志或性能方面的专家,但我的理解是,在现代JVM中,加载的类以类似于

在运行时,下面创建了一组类,这些类将被加载

(dotimes [i 1000000]
  (eval `(fn [] (+ ~i 10))))
可以通过连接到visualvm来检查对象:


在某些时候,vm决定卸载对象,但这是相当随意的。当装载100k而不是500k时,有没有办法卸载这些对象?

考虑一下为什么要丢弃它们。只是躺在那里,他们除了消耗内存之外什么都不做,所以我想你应该减少内存占用。所以,告诉JVM这一点。我不是JVM标志或性能方面的专家,但我的理解是,在现代JVM中,加载的类以类似于普通对象的方式进行GCD,但存储在称为元空间的单独区域中。如果您知道您的程序从不需要同时加载很多类,那么可以通过设置JVM选项
-XX:MaxMetaspaceSize
来限制空间,考虑一下为什么要删除它们。只是躺在那里,他们除了消耗内存之外什么都不做,所以我想你应该减少内存占用。所以,告诉JVM这一点。我不是JVM标志或性能方面的专家,但我的理解是,在现代JVM中,加载的类以类似于普通对象的方式进行GCD,但存储在称为元空间的单独区域中。如果您知道您的程序不需要一次加载很多类,您可以根据@amalloy的建议设置JVM选项
-XX:MaxMetaspaceSize

,以限制空间。设置
-XX:MaxMetaspaceSize=256m
会产生此效果(这是必需的效果)


根据@amalloy的建议。设置
-XX:MaxMetaspaceSize=256m
会产生此效果(这是必需的效果)


谢谢。这很有帮助。我看到visualvm上的metaspace选项卡。我将使用设置来看看gc会发生什么。我有一个测试套件,它已经崩溃了。我还在想到底发生了什么,谢谢。这很有帮助。我看到visualvm上的metaspace选项卡。我将使用设置来看看gc会发生什么。我有一个测试套件,它已经崩溃了。我还在想到底发生了什么。