java - 今天在 JVM 中最接近真正(资源受限)隔离的是什么?

标签 java jvm distributed bytecode

假设以下情况:

  • 您有一个支持许多用户的大型复杂系统(分布式、并发、庞大的数据集)。代码被发送到数据。
  • 您希望允许系统中的移动代码(即不受信任的代码与系统的其余部分在同一 JVM 中运行)利用数据的局部性,避免反序列化等。

您可以将代码放在一个有趣的类加载器中,并像 applet runner 一样使用自定义的安全策略。但是仍然存在问题:

应保护整个系统免受恶意代码的侵害 - 例如产生大量线程、耗尽所有 CPU、分配过多内存。

千禧年之初提出的想法是 JSR-121。 Isolates 旨在带来进程隔离的大部分好处 - 限制 cpu 使用、线程生成、堆使用:一般的资源分配。

鉴于这项工作似乎已被 Sun 放弃,我们目前能得到的最接近结果是什么?

到目前为止,我的想法是:

  • 字节码翻译代码以插入分配跟踪。谷歌似乎做了类似的事情:http://code.google.com/p/java-allocation-instrumenter/ .它需要一些工作,因为谷歌 (Joshua) Bloch-ed 自己陷入了困境,并将各种东西打包为私有(private)......
  • 同时禁止调用安全管理器不能调用的东西,例如线程创建。
  • 将(罕见的)中断检查插入到循环和递归函数中,以便监视线程可以监视(使用 ThreadMXBean),如果花费的时间太长,则中断有问题的线程。限制重入可能更简单——在对用户代码的任何调用中,基本 block 在中止之前只能输入 n 次。

有没有更好的或现有的方法来做到这一点?

最佳答案

这是一个复杂的问题。我的第一个想法是创建一种特定领域的语言来满足“移动”用户的需求。 DSL 将无法执行危险操作。

哪些人会上传不受信任的代码?这听起来像是一个可疑的想法。我们付出了很多努力来确保人们无法运行不受信任的代码 ;-)

关于java - 今天在 JVM 中最接近真正(资源受限)隔离的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004621/

相关文章:

java - Java内部如何维护函数StackTrace

python - NoSql 与我自己的自定义二进制文件?

distributed - 分布式系统的 statsd 架构

java - Primavera Integration API 无法创建用户许可证

java - jvm +LogCompilation输出中 "callee is too large"的含义

java - 在同一项目中使用多种 JVM 语言

webserver - MPI_SEND 在 MPI_BARRIER 之后停止工作

java - RPG iSeries 从 Java 函数中获取 byte[] 中的 PDF 并将其写入 IFS

java - Android Studio 无法解析 Android Manifest.xml 中的符号“MainActivity”

javascript - 如何在 websocket javascript 客户端中传递授权承载访问 token