符号缓存映射为 120MB - 它是什么以及它包含什么?
Symbol cache map is 120MB - what is it and what does it contain?
我们的项目中有一个 GWT 模块。最近有一个主要的内存过载,其中之一是存储在 StackTraceDeobfuscator.java ConcurrentHashMap<String, HashMap<String, String>> symbolMaps
字段中的 120MB 对象。它是什么,有什么用?
在 "the overload" 的那一刻,在地图包含的 16 个部分中,第一个是 59MB,第二个是 30MB,第三个是 29.9MB。
据我了解,这与代码被混淆和存储堆栈跟踪有关,但有人可以更详细地解释一下吗?是不是有太多带有巨大堆栈跟踪的异常,它们都被缓存了?但是 120MB 仍然很大,不是吗?
GWT 将尝试生成最少的 JavaScript 代码,以便在客户端进行更小的下载和更快的 JavaScript 解释。这包括将 Java 来源中使用的标识符缩短为可能的最短标识符。显然生成的短标识符名称对你(对人类)不是很有用。
如果出现任何错误,这意味着错误消息和堆栈跟踪不会包含对您有用的信息。为此,已实施 resymbolizitaion。如果提供了 -extra
编译器参数,则 符号映射 由 GWT 编译器(在编译时)生成。此符号映射包含从生成的短标识符到原始 Java 标识符的映射,因此如果出现错误,可以复制原始名称(只需从符号映射中查找)。
您可以在此处阅读更多相关信息:Resymbolization / Deobfuscation
我不在生产部署中使用符号映射。
symbolMaps 目录在 war 编译期间被排除
<exclude name="WEB-INF/deploy/**" />
。但最近我测试了 gwt-log.
提供的远程日志记录功能的反混淆
符号映射可能由-deploy "path"
编译标志生成。
如果您在 gwt.xml.
中使用 <collapse-all-properties />
,请注意此标志将被忽略
我们的项目中有一个 GWT 模块。最近有一个主要的内存过载,其中之一是存储在 StackTraceDeobfuscator.java ConcurrentHashMap<String, HashMap<String, String>> symbolMaps
字段中的 120MB 对象。它是什么,有什么用?
在 "the overload" 的那一刻,在地图包含的 16 个部分中,第一个是 59MB,第二个是 30MB,第三个是 29.9MB。
据我了解,这与代码被混淆和存储堆栈跟踪有关,但有人可以更详细地解释一下吗?是不是有太多带有巨大堆栈跟踪的异常,它们都被缓存了?但是 120MB 仍然很大,不是吗?
GWT 将尝试生成最少的 JavaScript 代码,以便在客户端进行更小的下载和更快的 JavaScript 解释。这包括将 Java 来源中使用的标识符缩短为可能的最短标识符。显然生成的短标识符名称对你(对人类)不是很有用。
如果出现任何错误,这意味着错误消息和堆栈跟踪不会包含对您有用的信息。为此,已实施 resymbolizitaion。如果提供了 -extra
编译器参数,则 符号映射 由 GWT 编译器(在编译时)生成。此符号映射包含从生成的短标识符到原始 Java 标识符的映射,因此如果出现错误,可以复制原始名称(只需从符号映射中查找)。
您可以在此处阅读更多相关信息:Resymbolization / Deobfuscation
我不在生产部署中使用符号映射。
symbolMaps 目录在 war 编译期间被排除
<exclude name="WEB-INF/deploy/**" />
。但最近我测试了 gwt-log.
符号映射可能由-deploy "path"
编译标志生成。
如果您在 gwt.xml.
<collapse-all-properties />
,请注意此标志将被忽略