java 冻结对象_模式匹配时冻结 - java
我的程序遇到一個小問題。它似乎凍結(jié)了,很可能是由于while循環(huán)引起的。
我正在嘗試做的是拾取并替換Java注釋。因此,在鍵入塊注釋時,您將使用/*打開該注釋。如果沒有結(jié)束符(*/),該程序?qū)⒃?-6秒內(nèi)凍結(jié),您將無法使用它。我使用更多的正則表達(dá)式和一個超過10,000行的文件運行了此文件,而沒有任何性能問題,因此任何類型的性能下降都令人震驚,但僅延遲5秒。
private static final String COMMENT_MATCHER = "(//.*)|(/\\u002A((\\s)|(.))*?\\u002A/)";
private String clearMatches(String code, final String regex) {
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(code);
while (matcher.find()) {
final String match = matcher.group();
code = code.replace(match, CharBuffer.allocate(match.length()).toString());
}
return code;
}
我猜問題是由于星號有誤,所以找到了許多匹配項并對其進(jìn)行了迭代。
問候,Obicere。
參考方案
您的時間觀察不足為奇。由于回溯,Java正則表達(dá)式匹配可能非常慢(即,如果n是正則表達(dá)式的長度,則為O(2 ** n))。有時可以修改regexp以避免回溯,因此它將變得很快。
一種提速的想法是使用所有格量詞,請參見http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html。另一個加速想法是使用更少的|運算符。
試試這個:
private static final String COMMENT_MATCHER = "(//.*+)|(?s)(/[*].*?[*]/)";
Java:線程池如何將線程映射到可運行對象 - java
試圖繞過Java并發(fā)問題,并且很難理解線程池,線程以及它們正在執(zhí)行的可運行“任務(wù)”之間的關(guān)系。如果我創(chuàng)建一個有10個線程的線程池,那么我是否必須將相同的任務(wù)傳遞給池中的每個線程,或者池化的線程實際上只是與任務(wù)無關(guān)的“工人無人機”可用于執(zhí)行任何任務(wù)?無論哪種方式,Executor / ExecutorService如何將正確的任務(wù)分配給正確的線程? 參考方案 …java split regex-字符的任意組合 - java
我正在使用3個字符分割字符串:空格,破折號和逗號我想要的是能夠使用這3個字符的任意組合進(jìn)行拆分,例如:-,(破折號后跟逗號)或,--(逗號后加2破折號)或- , -(破折號,逗號間隔破折號)等 String address = "Sector -18B, Dwarka"; String[] addressParts = address.s…JAVA:字節(jié)碼和二進(jìn)制有什么區(qū)別? - java
java字節(jié)代碼(已編譯的語言,也稱為目標(biāo)代碼)與機器代碼(當(dāng)前計算機的本機代碼)之間有什么區(qū)別?我讀過一些書,他們將字節(jié)碼稱為二進(jìn)制指令,但我不知道為什么。 參考方案 字節(jié)碼是獨立于平臺的,在Windows中運行的編譯器編譯的字節(jié)碼仍將在linux / unix / mac中運行。機器代碼是特定于平臺的,如果在Windows x86中編譯,則它將僅在Win…java:繼承 - java
有哪些替代繼承的方法? java大神給出的解決方案 有效的Java:偏重于繼承而不是繼承。 (這實際上也來自“四人幫”)。他提出的理由是,如果擴展類未明確設(shè)計為繼承,則繼承會引起很多不正常的副作用。例如,對super.someMethod()的任何調(diào)用都可以引導(dǎo)您通過未知代碼的意外路徑。取而代之的是,持有對本來應(yīng)該擴展的類的引用,然后委托給它。這是與Eric…Java:BigInteger,如何通過OutputStream編寫它 - java
我想將BigInteger寫入文件。做這個的最好方式是什么。當(dāng)然,我想從輸入流中讀取(使用程序,而不是人工)。我必須使用ObjectOutputStream還是有更好的方法?目的是使用盡可能少的字節(jié)。謝謝馬丁 參考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是將對象序列化為八位字節(jié)序列的一種通用方法。但…
總結(jié)
以上是生活随笔為你收集整理的java 冻结对象_模式匹配时冻结 - java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么把图片四角去掉_端午“粽子”怎么做,
- 下一篇: asp.core api 通过socke