注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之四十三大概Java中线程堆栈的大小  

2015-09-14 18:36:37|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之四十三大概Java中线程堆栈的大小

JNI的调用中,会出现下面的问题:

A/libc(18377): Fatal signal 11 (SIGSEGV) at 0x63c1c000 (code=2), thread 18448 (pool-1-thread-1)

一般来说,这个问题是比较好定位的,原因不外乎有以下几个:

1、内存溢出

2、指针为空

3、指针越界。

现在碰到的问题是,在JNI中调用了一个拷贝函数,没有做其它的动作,这个函数是个SO库中的,但是线程是在Android中创建的。

仔细看了下,打了个日志,发现了原因,这个函数中创建了两个结构体的对象,每个对象的大小在600K,而如果只处理一个对象,程序就可以安全的运行,两个就不行了,报上面的错误。

那么这就出来一个问题,在Android中,一个线程 堆栈到底有多大?在网上查了很多资料,都语焉不详,找不到权威的文档。这就不如WINLINUX的文档了。

大家都知道,在WIN下线程的堆栈默认是1M,LINUX下默认是10M,当然这个大小是可以调整的,但是一般建议是不要调整的。

如果在纯的C++/C中,把这两个变量放到全局就OK了,但在JNI中则不行,只能是NEW出来,这样就好了。可见NDK对堆栈的处理还是有细微的不同的。

从目前的情况来看,Android的线程默认就该在1M左右。如果大家有权威的文档资料,请指教。

  评论这张
 
阅读(240)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017