• 你用Intent传递数据,实际上走的是跨进程通信(IPC),跨进程通信需要把数据从内核copy到进程中,每一个进程有一个接收内核数据的缓冲区,默认是1M;如果一次传递的数据超过限制,就会出现异常。

    不同厂商表现不一样有可能是厂商修改了此限制的大小,也可能同样的对象在不同的机器上大小不一样。

    传递大数据,不应该用Intent;考虑使用ContentProvider或者直接匿名共享内存。针对你的情况,简单考虑可以考虑分段传输。

  • 抛砖引玉一下:

    你的这两个问题,应该不是Java规范规定的,而是具体的JVM实现。
    第一个问题,int, double, long 等基本类型属于值类型,在内存中的表示就直接是原始的值,比如int a = 3 可能就是0x00000011;double等浮点数有浮点数的表示法。至于这个内存放在哪,也就是它的地址是什么,取决于当前语境;比如局部变量那就是在栈上,如果是类的成员变量,static 的在meta space,实例变量堆上。

    第二个问题,常量池也是一个内存区域,与堆栈的区别;就是JVM的一种划分而已;通常说的常量池应该就是指“字符串常量池”。

  • what's the differences?

  • 作为360的员工,确实深感遗憾;我司的开源文化并不浓厚,造轮子的一大堆,开源的没几个。就拿手机卫士来说,我们应该是业界最早研究并实现插件方案的团队之一(据传闻手机助手的DroidPlugin借鉴了我们的思路,但现在看来具体实现方案大不相同),但是我们的方案至今甚至永远都不会开源。
    令人讽刺的是,作为手机卫士部门的我,并不能分享我们的插件方案;而是选择业余时间研究DroidPlugin并分享给大家。360确实没有开源的基因,这与前几代的技术leader气质有关。

    但是话又说回来,一个公司开源与否与技术是否强大并无必然联系;公司的开源项目其实也是公司的商业模式之一。别看阿里开源很活跃,但是它在公司层面对于开源的战略与FaceBook,Google,square差太远了;很多开源项目一旦push到github最终结果就是基本不维护,开源不是公开,是为了更好的发展。就拿ReactNative来说,你以为FaceBook只是简单的揭示一下自己做的事情有多先进多牛逼么?naive。Google有Android/Java Go的生态,Apple iOS/swift/AppStore的生态,而FaceBook有什么?在我看来,ReactNative如果发展够好是可以颠覆这两者的,这才是它开源的重点——吸引更多的开发者站到自己的阵营,形成自己的生态;而不是简单的把代码丢到github上去。