我在想,使用本地代码进行加密操作是否更加安全?使用Java时,你无法确定GC是否重新排序内存并在加/解密后立即将密钥清零,这样会在内存中留下浅表副本。也许这是一个愚蠢的问题,但我找不到任何信息。本地代码仍在沙盒中运行并在虚拟机内部运行,因此GC / VM /系统是否可以重新排列内存并因此留下浅表副本?所以堆栈和堆是否静态或可移动?据我所知,它们具有虚拟地址,因此可以这样做。谢谢你,祝好。
原生代码是针对 ARM(现在可能也支持 Intel)进行编译,而不是针对 Dalvik VM 进行编译。它直接在处理器上运行,由 Dalvik 加载和调用,但并不直接受其控制。原生代码的堆栈和堆是真实存在的。调用 memcpy/memset 将会永久更改内存。所有现代系统都拥有虚拟内存功能,因此这大概就是您所能获得的关于安全性的信息了。