java hashmap object_Java中的大量Object(使用HashMap)

你好,

我目前正在研究Java中的单词预测.

为此,我使用的是基于NGram的模型,但我有一些内存问题……

在第一次,我有一个这样的模型:

public class NGram implements Serializable {

private static final long serialVersionUID = 1L;

private transient int count;

private int id;

private NGram next;

public NGram(int idP) {

this.id = idP;

}

}

但这需要大量的记忆,所以我认为我需要优化,我想,如果我有“向世界问好”和“向人民问好”,而不是得到两个ngram,我可以保留一个“你好” “然后有两个可能性:”人“和”世界“.

更清楚的是,这是我的新模型:

public class BNGram implements Serializable {

private static final long serialVersionUID = 1L;

private int id;

private HashMap next;

private int count = 1;

public BNGram(int idP) {

this.id = idP;

this.next = new HashMap();

}

}

但似乎我的第二个模型消耗了两倍的内存…我认为这是因为HashMap,但我不知道如何减少这个?我尝试使用不同的Map实现,比如Trove或其他,但它不会改变任何东西.

为了给你一个想法,对于一个9MB的文本,带有57818个不同的单词(不同,但它不是单词的总数),在NGram生成之后,我的javaw进程消耗1.2GB的内存……

如果我用GZIPOutputStream保存它,它在磁盘上需要大约18MB.

所以我的问题是:如何使用更少的内存?我可以用压缩制作东西(作为序列化).

我需要将其添加到其他应用程序,所以我需要减少内存使用量之前……

非常感谢,抱歉我的英语不好……

ZiMath

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值