java、native数据共享

场景: 为了提高数据处理性能,应用启动把数据库数据加载内存中,在java层使用HashMap维护内存数据,java逐条传输数据给native处理;当增删改查时,内存和数据库同时更新

问题: 由于jni的缘故,高频度调用jni处理数据,每条数据量不大,jni反而成为效率的瓶颈,效率太低

改进方向: 每次处理数据,native可以直接获取所有处理数据,不需要java逐条传输;不影响数据同步(增删改查)

改进方法

方法一: 空间换时间。应用启动把数据一次性传递给jni,在native维护一个数组
存在问题:
1、 每条数据量比较小,当数据量很大时,也有几十兆甚至更大,此时java、native各拷贝一份,内存成本太大
2、 数据量大,jni一次性传输时间成本大

方法二: 空间换时间。使用android中nio中的ByteBuffer实现java、native层内存共享
存在问题:
1、 每条数据量比较小,当数据量很大时,也有几十兆甚至更大,此时java、native各拷贝一份,内存成本太大

方法三: 应用启动时,在native层操作数据库,加载数据数据到内存,java层不再加载;数据库维护由java层实现,增删时调用jni接口实现native内存数据维护
存在风险:
1、 增删频度。如果增删频度太高,对jni频繁调用也会存在时效问题

方法四: 使用内存数据库,java、native可以同时操作数据库
存在风险:
1、 多线程、多进程读写,同步问题,是否会影响到性能

支持java、native的内存数据库:LMDB、SQL、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值