IKAnalyzer词典占用内存大小分析
来源:互联网 发布:Mvc pattern java 编辑:程序博客网 时间:2024/05/16 04:40
转载原文:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7387a9f8a4624c3933fc239045c1c3fb0e7747c5b4c84856b6777f9120dacab6b2e64436ba09bbed71d82e6d263388851752b54d15612a548fc9517629f73d60dfeaf6ebdfcaf6c87eb8f93895b0893005929debbc30d4003ca1ee76447f4d2e95f635e07cbec27648f4e072f885233&p=882a9546d6871bf51cbe9b7c570cc4&newp=c973de15d9c342af0af1c7710f498d231610db2151ddd001298ffe0cc4241a1a1a3aecbf26201302d2ce7c6001ad4e5be1fa36703d0034f1f689df08d2ecce7e7d94&user=baidu&fm=sc&query=iKanalyzer+%BD%FB%D3%C3%B4%CA&qid=a8eee497001243e2&p1=11
IKAnalyzer的存储结构:
这里还是使用搜狗的扩展词库
扩展词典添加搜狗词库:
先直接用java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法
进行计算。
先把这92790个放入到ext.dic文件中。
加上IKAnalyzer默认加载的这两个词典:
总格的词条是66W多。
执行如下代码:
public static void main(String[] args){ calculateMem();}public static void calculateMem(){ System.out.println("初始化内存"); System.out.println("空闲内存:" + Runtime.getRuntime().freeMemory()); System.out.println("已获取到的内存:" + Runtime.getRuntime().totalMemory()); System.out.println("能够获得的最大内存:" +Runtime.getRuntime().maxMemory()); System.gc(); Dictionary.initial(DefaultConfig.getInstance()); long total = Runtime.getRuntime().totalMemory(); // 返回总的内存数 long size = Runtime.getRuntime().freeMemory(); // 返回当前的剩余内存数 System.out.println("Memory used: " + (total - size));}
结果是90.62M
接下来使用Instrumentation的getObjectSize方法进行计算下:
public class CalculateDictionarySize { public static void main(String[] args){ Dictionary.initial(DefaultConfig.getInstance()); System.out.print(SizeOfAgent.fullSizeOf(Dictionary.getSingleton()) + "B"); }}
编写MANIFEST.MF文件:
Manifest-Version: 1.0Ant-Version: Apache Ant 1.6.1Created-By: 1.5.0_06-b05 (Sun Microsystems Inc.)Main-Class: com.itzhai.test.CalculateDictionarySizeClass-Path: lib/IKAnalyzer2012_u6.jarPremain-Class: com.itzhai.test.SizeOfAgentBoot-Class-Path:Can-Redefine-Classes: false
包结构如下:
SizeOfAgent的写法参考这里:
打包成Jar文件之后,到命令行中执行:
结果如下:
73.48M
也就是说66W多个字条占用了73.48M的内存。
IKAnalyzer是以字典树的方式把字典载入内存中的:
词典管理类为Dictionary,有三种词典:主词典,停用词词典,量词词典,这三种词典都是对应为一个DictSegment对象的,而DictSegment对象时树形结构的,每一个子节点又可以是一个DictSegment对象。
节点的存储方式:以数组(DictSegment[])或者Map(Map<Character, DictSegment)存储的,按照如下规则选择存储方式
- 如果子节点数量小于等于ARRAY_LENGTH_LIMIT,则采用数组存储
- 如果子节点数量大于ARRAY_LENGTH_LIMIT,则采用Map存储。
- IKAnalyzer词典占用内存大小分析
- 安卓中图片占用内存大小分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- PHP数组实际占用内存大小的分析
- lucene配置IKanalyzer词典
- IKAnalyzer 配置扩展词典
- IKAnalyzer词典扩充
- 关于struct占用内存大小的几点分析
- PHP数组实际占用内存大小的分析与弱语言
- YUV数据占用内存大小
- bitmap占用内存大小
- Java对象占用内存大小
- mpeg4标准包含{xvid\divx,h264\avc}
- hadoop2.7.1java.lang.IllegalArgumentException: The ServiceName: mapreduce.shuffle set in yarn.nodema
- 欢迎使用CSDN-markdown编辑器
- POJ2139-Six Degrees of Cowvin Bacon
- 九九乘法表
- IKAnalyzer词典占用内存大小分析
- 谷歌互联网服务有20亿行代码 为Windows 40倍
- SAMBA服务的配置
- 牛客网 剑指offer系列 错题记录一
- 【Python学习笔记】调用函数
- c文件函数转载
- 输入一个数字是否为闰年
- 日期算法的相关操作
- Lucene建立索引 使用IKAnalyzer扩展词库