java:放弃groovy这个玩具(scala, groovy, jruby,jython,动态语言)
放弃groovy这个玩具 ,因为它只是一个玩具, 无法应用于实际.
之前我用groovy写了一个网站, deploy到tomcat上.
运行一段时间之后,tomcat就开始失控,内存占用大的出奇 , 最后导致服务器死机!
为什么会这样呢? 我的理解->
原因大概在于groovy为了实现动态类型, 大量使用了反射,
并且在很大程度上侵入了java基础类.
加上groovy现在的开发者水平不高,
导致程序的表现往往不合预期, 内存的管理上存在问题!
即时GC不出问题时,groovy编译出来的类也需要消耗更多的内存,
多到实在无法使用, 甚至限制代码规模!
如果你在groovy项目用了许多类(比如通过.jar包来引入),并在代码中import并使用, 你就会发现一般的机器内存显然不足了.
因为groovy会对几乎所有用到的类,都做一遍侵入性改造 ,以使它们表现得动态!
最终的结果就是, groovy号称与java无缝集成,却恰恰因为无缝集成而侵入了java本身, 使得整个系统变得混乱, 甚至不可用!
结果是: groovy 中看,不中用!
所以另一种:可以编译到.class,并且使用java 类, 但不侵入java本身的动态语言,可能是更好的选择!
保持一定的层次, 避免太紧的耦合, 看来是非常必要的.
不然,出了问题,如何确定问题的原因呢?