rjava调用R代码报错exception_access_violation

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006c724802, pid=7032, tid=7664
#
# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [R.dll+0x24802]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

问题原因:使用了低级别的Rengine API,低级别API非线程安全,且未作性能优化。数据量较大时,jvm崩溃。
解决方法:替换所有使用rni开头的函数,使用Rengine.assign,Rengine.eval实现相同效果。

参考文章:
http://stats-rosuda-devel.listserv.uni-augsburg.narkive.com/DOWBy92v/exception-access-violation-when-calling-rnieval-to-retrieve-arrays
我遇到的场景与此文章中类似,少量数据没有问题,数据量稍大,报错。

http://rforge.net/org/doc/org/rosuda/JRI/Rengine.html
文章开头处,重要提示,作者明确建议使用high-level api,不建议使用low-level api。通过R安装的rjava包根目录下相关测试用例中,也有类似注释。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值