-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
RapidOCR JNI:OcrResultUtils 循环内未 DeleteLocalRef,文本块多时可能撑爆 local reference table #575
Copy link
Copy link
Open
Labels
Accepted 🌱 受理Maintainer may be busy resolving or fixing the labeled issuesMaintainer may be busy resolving or fixing the labeled issuesProposal 💡 方案Issue creater's own proposal which may be really helpfulIssue creater's own proposal which may be really helpfulRecommendation 🛠️ 建议RecommendationRecommendationReinforcement ✨ 强化Issues for higher quality of being compatibleIssues for higher quality of being compatible
Description
Activity
Metadata
Metadata
Assignees
Labels
Accepted 🌱 受理Maintainer may be busy resolving or fixing the labeled issuesMaintainer may be busy resolving or fixing the labeled issuesProposal 💡 方案Issue creater's own proposal which may be really helpfulIssue creater's own proposal which may be really helpfulRecommendation 🛠️ 建议RecommendationRecommendationReinforcement ✨ 强化Issues for higher quality of being compatibleIssues for higher quality of being compatible
问题
libs/rapidocr/src/main/cpp/src/OcrResultUtils.cpp把 OCR 结果转成 Java 对象时,循环里创建的 JNI 局部引用用完后没有DeleteLocalRef。这些辅助函数跑在同一次 JNI native 调用里,C++ 函数返回不会清 local ref。Android 默认 local reference table 大约 512 个槽。整页识别文本块一多,可能在
detect返回前出现:JNI ERROR: local reference table overflownative 方法返回后 JVM 会清表,所以这不是跨调用的常驻泄漏,而是单次转换过程中的容量问题。
代码
newJBoxPoint:每个点NewObject后加入 ArrayList,未释放jPoint;newJPoint每次还FindClass: