我编写了一个程序,可以分析项目的源代码并根据代码报告各种问题和指标。
为了分析源代码,我加载项目目录结构中存在的代码文件并从内存中分析代码。该代码在传递给其他方法进行进一步分析之前会经过大量处理。
处理代码时,代码会传递给多个类。
有一天,我在我的团队的一个较大的项目上运行它,我的程序因为加载到内存中的源代码太多而崩溃了。这是目前的一个极端情况,但我希望将来能够处理这个问题。
避免内存问题的最佳方法是什么?
我正在考虑加载代码,对文件进行初始处理,然后将结果序列化到磁盘,这样当我需要再次访问它们时,我就不必再次经历操作原始代码的过程。这有道理吗?或者序列化/反序列化比再次处理代码更昂贵?
我想在解决这个问题的同时保持合理的性能水平。大多数时候,源代码会毫无问题地装入内存,那么有没有办法在内存不足时仅“分页”我的信息?有没有办法知道我的应用程序何时内存不足?
Update:
问题不在于单个文件填满内存,而是内存中的所有文件同时填满内存。我当前的想法是在处理它们时旋转磁盘驱动器
1.6GB 仍然可以管理,并且本身不会导致内存问题。低效的字符串操作可能会做到这一点。
当您解析源代码时,您可能会将其分成某些子字符串 - 标记或无论您如何称呼它们。如果您的令牌组合起来占整个源代码,那么内存消耗就会增加一倍。根据您执行的处理的复杂性,乘数可能会更大。
我在这里的第一步是仔细研究如何使用字符串并找到一种优化它的方法 - 即在第一次传递后丢弃原始字符串,压缩空格,或使用原始字符串的索引(指针)而不是实际的子字符串 - 有许多技术在这里有用。
如果这些都没有帮助,那么我会诉诸于在磁盘之间交换它们
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)