JavaScript jvm 实现

20
有没有JavaScript的jvm实现?若没有,能否告诉我为什么还没有实现?可能是不可能吗?我想知道需要什么条件才能创造一个。我问这个问题的原因是我想创建一个带有编译功能的Web浏览器IDE,而无需在计算机上安装JDK或JRE(仅需在浏览器中)。

我在Java方面的经验很少,但是还是要考虑一下,由于浏览器的各种限制,您的JVM将无法访问磁盘、操作系统或进行随机网络连接。希望对您有所帮助。 - UltraInstinct
"具有编译功能的Web浏览器IDE"。以后最好先提出目标,以消除一些混淆。 ;) - Andrew Thompson
把Java代码发送到服务器上并在那里编译会更加容易无限。 - pap
1
@pap 针对代码编译的服务器防止拒绝服务攻击并不是“无限容易”的事情。 ;) - Andrew Thompson
@AndrewThompson - 我们来比赛吧。你开始用JavaScript实现JVM,我将着手于防止DOS攻击的低调网站。让我们看看谁先完成吧 ;) - pap
有人会运行Java小程序吗?(例如,用于Web浏览器的Java)? - LatinSuD
7个回答

18

目前最流行的似乎是Doppio


这个JVM实现有GUI API吗? - Horcrux7

7
您可以了解一下bck2brwsr(又称为java.net HTML)
  • 它是一个虚拟机,将Java字节码转换为JavaScript(Bck2Brwsr虚拟机)
  • 提供基于Java的HTML包装器(通过Java API使用HTML)

该项目的范围不是执行任何现有的Java库。 (请参见http://wiki.apidesign.org/wiki/Bck2Brwsr

网上有两个很好的示例:

  • 计算器,提供良好的技术洞察力(http://xelfi.cz/bck2brwsr/
  • 一个很好的太空入侵者演示作为概念验证(JAYDAY 2013年Java峰会页面)

开始使用工作示例(需要Maven和JDK7):

步骤1:加载原型

mvn archetype:generate -DarchetypeGroupId=org.apidesign.bck2brwsr \
 -DarchetypeArtifactId=bck2brwsr-archetype-html-sample -DarchetypeVersion=0.7.2 \
 -DarchetypeRepository=https://maven.java.net/content/repositories/releases/

步骤二:构建HTML页面和依赖项,并将其打包为ZIP文件。
mvn install
# produces bck-1.0-SNAPSHOT-bck2brwsr.zip

第三步:解压ZIP文件。
cd target; unzip bck-1.0-SNAPSHOT-bck2brwsr.zip
  creating: public_html/
  creating: public_html/lib/
  extracting: public_html/lib/emul-0.7.2-rt.jar  
  extracting: public_html/lib/javaquery.api-0.7.2.jar  
  inflating: public_html/bck2brwsr.js  
  extracting: public_html/bck-1.0-SNAPSHOT.jar  
  inflating: public_html/index.html 

步骤四:用浏览器打开index.html

6

我不确定jsJVM的成熟程度,但它看起来是你会感兴趣的东西。正如网页所说,它是用Javascript编写的JVM。


3
jsJVM似乎已经完全被放弃了。现在Doppio似乎是最相关的,但有时会出现一些问题。 - Qix - MONICA WAS MISTREATED

3

1

非常晚的回答,但是对于未来的询问者:自此问题首次提出以来,已经发布了一种新的Java JVM实现,用于JavaScript。它声称可以在没有安装Java的情况下实现JVM。

https://www.javapoly.com/


欢迎提供潜在解决方案的链接,但请添加链接周围的上下文,以便其他用户了解它是什么以及为什么存在。如果目标站点无法访问或永久离线,请始终引用重要链接的最相关部分。请注意,仅仅是一个指向外部网站的链接可能是为什么和如何删除某些答案?的原因之一。 - Mogsdad
2
这样好一些吗?有人能解释一下为什么我的回答被踩和删除了,而上面的Doppio回答得到了12个赞,却没有比我的回答提供更有用的信息吗? - KWallace
这个JVM实现有GUI API吗? - Horcrux7
不幸的是,它看起来已经死了。 - Paul Heil

0

有一个用Java编写的JVM,它具有JavaScript字节码解释器: https://gitlab.com/neoexpert/jvm

它还可以直接将字节码编译为JavaScript以提高性能。


0
编译Java使用JavaScript的问题之一是编译器通常需要知道目标Java最低版本的方法和属性的存在(或不存在)。要了解这些信息,您需要存储描述目标J2SE每个类的公共成员的属性或变量。这代表了一个非常庞大的信息块。

你不能把那个东西放在cookie或者HTML5本地存储里吗? - Nikolas Papirniy
我怀疑在本地存储中期望的“5兆”空间是否足以容纳非final类的公共成员和(我忘了)受保护成员的文本表示,对于1.6或1.7版本的JRE来说。也许适用于1.1和1.2版本。 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接