java-今天在JVM中最接近真实(资源受限)隔离的是什么?
作者:互联网
处于以下情况:
>您有一个庞大而复杂的系统(分布式,并发,庞大的数据集),该系统支持许多用户.代码被发送到数据.
>您想允许系统中的移动代码-即将与系统其余部分在同一JVM中运行的不受信任的代码,以利用数据的本地性,避免反序列化等.
您可以将代码放在有趣的类加载器中,并像applet运行程序一样使用自定义的安全策略.但是仍然存在问题:
整个系统应该受到保护,免受恶意代码的侵害-例如,产生大量的线程,耗尽所有cpu,分配过多的内存.
千年之初的想法是JSR-121.隔离旨在带来进程隔离的大多数好处-限制cpu使用,线程生成,堆使用:通常是资源分配.
考虑到Sun似乎放弃了这项工作,我们目前能得到的最接近的是什么?
到目前为止,我的想法是:
>字节码转换代码以插入分配跟踪. Google似乎做了类似的事情:http://code.google.com/p/java-allocation-instrumenter/.就像Google(Joshua)将自己推到一个角落并将各种东西打包成私有的一样,它需要一些工作…
>还禁止调用安全管理器无法执行的操作,例如创建线程.
>将(很少)中断检查插入到循环和递归函数中,以便监视线程可以监视(使用ThreadMXBean),如果花费的时间太长,则中断有问题的线程.仅对重入进行限制可能更简单-在对用户代码的任何调用中,基本块只能在中止之前输入n次.
有没有更好的或现有的方法来做到这一点?
解决方法:
这是一个复杂的问题.我的第一个想法是创建一种特定于域的语言,该语言可以满足“移动”用户的需求. DSL无法执行危险的操作.
谁将上传不受信任的代码?听起来像是一个可疑的想法.我们花了很多精力来确保人们不能运行不受信任的代码;-)
标签:jvm,distributed,java,bytecode 来源: https://codeday.me/bug/20191209/2095971.html