【发布时间】:2012-02-28 04:31:36
【问题描述】:
我正在研究一个正则表达式匹配函数。问题是,这个函数将在嵌套循环中被框架调用。如果创建了临时对象,GC会造成很大的性能问题。
是否可以在不创建临时对象(Pattern、Matcher)的情况下处理正则表达式? 重写正则表达式类是我最后的选择...
【问题讨论】:
-
1) GC 永远不会导致性能问题! 2) 你不能仅仅因为你没有使用临时对象就假设在你的循环期间不会调用 GC。 3)如果您希望对象持久存在,那么您应该stackoverflow.com/questions/1329926/…
-
@Ahmed-Masud :从技术上讲这是不正确的,因为主(完整)GC 周期取决于分配给 JVM 的内存量,更多的内存意味着更多的时间来完成循环- 对系统有一些影响
-
@BigFatBaby 我同意分配的内存数量和块将导致 GC 线程更努力地工作(或不工作)。我在 1) 中的观点是,要么系统对于应用程序来说足够强大,要么不够强大,并且应该在启动时调整 GC。如果铁资源枯竭,那么任何方法无论如何都充满危险。是否持有所有对象的 refs 以避免 GC(mem hog);或者使用 JNI 编写外部方法(在本地运行)并完全绕过 GC 之一仍然受到可用系统资源的限制。
-
@Ahmed-Masud :经验法则是 - 如果 GC 给你带来麻烦,你做错了......我同意......但是我是来帮助解决问题的(专门询问) ...对于常见做法,Stack Exchange 上还有其他网站 :)