我有一个Bash脚本(50行代码),由于bash的限制,需要一些黑客攻击.所以有人说:"嘿,使用比bash更好的语言!"
所以,我看了一下Groovy(Groovy/Grails是我的学习列表中的下一个,所以也许这是个好时机).我可以做更复杂的shell脚本,所以这可能是一个完美的选择.
但是,当我运行一个简单的Groovy脚本(while(true){...})时,Java进程的内存消耗为123M,哎哟,我已经有大约10个这样的脚本可以运行(现在基于所有bash)在一个650M内存的盒子上.等效的独立bash脚本在大约1.5M的内存中运行.
这是一个例子:
Joa*_*uer 10
如果内存受此限制,那么在JVM上运行的任何语言都将处于劣势.而Groovy就是这样一种语言.
其他语言如Python或Perl具有更精简的运行时并且对于简单的脚本需要更少的内存(我的猜测是Python仍然比Perl更精简,但我不能用数字来支持它).
在我看来,Python是一个很好的升级bash脚本,提供更好的功能,同时仍然足够精简,可以在常见的脚本中使用.
bash本身是一种很好的脚本语言,具有合理的内存要求.如果内存占用非常重要,那么另一个符合POSIX标准的shell(例如破折号)可能是合理的替代品.请注意,bash现代POSIX兼容的Shell中存在许多但不是所有功能.
小智 9
这是一个公式:
Groovy和Scala对于琐碎的任务来说太过分了,但对推土机情况来说是天赐之物 - 严肃的脚本使得JVM看起来非常节俭.
当您启动并在JVM上运行的应用程序时,您应该能够配置应该影响内存占用的堆大小和permgen空间等内容.如果您需要使用Java或Groovy或Jython或JRuby或Scala编写,那么请查看如何为您的应用程序设置它.
是的,基于JVM的语言以消耗内存而闻名,例如对象的8字节开销以及填充需要使得Integer对象需要比你想象的更多的内存(在某处查看:-)).但是,JVM提供了很多的优势:大多数JVM已经通过真正聪明的人的高度调整和优化在过去的15年(你可以写一个垃圾收集器是好?).Java平台非常庞大.它拥有一切.
您的10个脚本是否长时间运行并且需要同时驻留内存?还是他们快跑?既然你已经用Bash编写了它们,那听起来你不需要丰富的Java平台.你只是移动文件,切割和捣蛋,唤醒和sedding?
根据经验,我喜欢Bash的小脚本,但是一旦我达到了一个循环或两个循环和几个变量(基本上任何涉及除if语句之外的逻辑),Ruby和Python开始看起来那么多更易于阅读和维护.Groovy不一定是一个糟糕的选择(虽然其他语言更受欢迎).但就内存占用问题而言,您应该花时间尝试调整基于JVM的应用程序并进行一些测量.在你的情况下,它可能并不重要.也许JVM启动时间起了作用?很大程度上取决于您的具体情况.
| 归档时间: |
|
| 查看次数: |
7038 次 |
| 最近记录: |