我已经阅读了如何在另一个groovy脚本中导入groovy文件
我想在一个groovy文件中定义常用函数,并从其他groovy文件中调用这些函数.
我明白这会像脚本语言一样使用Groovy,即我不需要类/对象.我正在尝试像dsl一样可以在groovy中完成.所有变量都将从Java声明,我想在shell中执行groovy脚本.
这有可能吗?有人可以提供一些例子.
我有一个Grails应用程序,它创建了相当不错的域对象创建和破坏,并且它似乎以非常非常快的速度耗尽了PermGen空间.我做了通常的调整(将PermGen提升到256M,启用了类GC等),但没有骰子.
是否有人愿意推荐一些(并希望免费或非常低成本)工具来解决Groovy和/或Java中的这种内存消耗?或者您用于解决JVM内存问题的一些技术?
编辑:这是在生产模式下在Tomcat内部署应用程序的时间; 我没试过其他容器.即便如此,有一些资源可以追踪问题.
昨天我将我的第一个Grails(2.3.6)应用程序部署到开发服务器并开始监控它.我刚刚得到一个自动监视器,说明CPU被固定在这台机器上,所以我连接到它.我跑了top,发现是我的Java应用程序的PID固定服务器.我也注意到内存是40%.几秒钟后,CPU停止固定,降至正常水平,内存恢复到~20%范围内.经典主要GC.
在收集的同时,我做了堆转储.在GC之后,我在JVisualVM中打开了转储,并看到大部分内存都是为一个org.codehaus.groovy.runtime.metaclass.MetaMethodIndex.Entry类分配的.总共有近250,000个这样的实例,占用了大约25 MB的内存.
我用Google搜索了这个课程并看了一下它是非常有帮助的Javadocs.所以我仍然不知道这门课做了什么.
但谷歌搜索它也带来了大约十几篇涉及这个类的相关文章(其中一些是SO问题)和Grails/Groovy应用程序的PermGen/classloader泄漏.虽然看起来我的应用程序确实用GC清理了这些250K实例,但仍然令人不安的是它有如此多的实例,并且GC将CPU固定超过5分钟.
我的问题:
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled帮助这个特殊问题?