学习j2v8--在JVM上运行Node.js

在JVM上运行Node.js

前言:本文章只是个人翻译自用,不喜欢者勿喷
最近在研究android与js交互

奈何本人能力有限,又是英语渣渣,特用机译方便理解

单一供应商锁定的日子已经一去不复返了,在整个组织中使用一种技术堆栈。即使是小型组织和业余爱好者,也会在一个项目中发现自己在混合技术。多年以来,Java一直统治着服务器。今天,Node.js无处不在。

但是,即使Node.js的兴起和JavaScript的普及,Java仍在继续发光。此外,很少有组织负担得起将整个平台从JVM迁移到Node.js的费用。这意味着组织必须继续使用其当前的技术堆栈,或者使用网络API运行多个堆栈进行通信。

另一个选择是在单个进程中运行Node.js和JVM,J2V8 最终使这成为可能。
j2v8

J2V8是Java的一组V8绑定。J2V8将V8捆绑为动态库,并通过Java本机接口(JNI)为引擎提供了Java API。使用J2V8,您可以以类似于使用Rhino或Nashorn的方式使用V8执行JavaScript 。

J2V8最初是为了将高性能JavaScript 引入跨平台移动框架Tabris.js而开发的。

在过去的几个月中,我设法将Node.js构建为动态库,并为其提供了Java API。现在,您可以直接从Java执行Node脚本。与尝试使用其他JavaScript引擎实现Node.js的其他方法不同,这是真正的Node.js — 错误换功能,功能换功能。 Node.js与JVM在同一进程中运行,并且所有通信都是通过JNI同步完成的。

结合节点和JVM

J2V8提供了一个API,用于执行Node.js脚本,注册Java回调,调用JavaScript函数, 需要 NPM模块以及运行Node.js消息循环。Node.js核心模块也已被编译。

在JVM上运行Node.js,为希望开始使用Node.js的拥有大型Java堆栈的任何人提供了一条轻松的迁移路径。例如,您可以运行Node.js服务器(例如Express.js)并调用现有的Java方法来处理某些请求。

static String NODE_SCRIPT = "var http = require('http');\n"
  + ""
  + "var server = http.createServer(function (request, response) {\n"
  + " response.writeHead(200, {'Content-Type': 'text/plain'});\n"
  + " response.end(someJavaMethod());\n"
  + "});\n"
  + ""
  + "server.listen(8000);\n"
  + "console.log('Server running at https://127.0.0.1:8000/');";

public static void main(String[] args) throws IOException {
  final NodeJS nodeJS = NodeJS.createNodeJS();
  JavaCallback callback = new JavaCallback() {
			
    public Object invoke(V8Object receiver, V8Array parameters) {
      return "Hello, JavaWorld!";
    }
  };
		
  nodeJS.getRuntime().registerJavaMethod(callback, "someJavaMethod");
  File nodeScript = createTemporaryScriptFile(NODE_SCRIPT, "example");
		
  nodeJS.exec(nodeScript);
		
  while(nodeJS.isRunning()) {
    nodeJS.handleMessage();
  }
  nodeJS.release();
}

NPM

除了从Node.js调用现有的Java方法之外,J2V8还提供了直接从Java调用JavaScript函数(以及扩展为NPM模块)的功能。通过这种集成,Java用户现在可以直接在JVM上开始使用NPM模块。例如,您可以使用Java 的jimp图像处理库。

public static void main(String[] args) {
  final NodeJS nodeJS = NodeJS.createNodeJS();
  final V8Object jimp = nodeJS.require(new File("path_to_jimp_module"));
		
  V8Function callback = new V8Function(nodeJS.getRuntime(), new JavaCallback() {	
    public Object invoke(V8Object receiver, V8Array parameters) {
      final V8Object image = parameters.getObject(1);
      executeJSFunction(image, "posterize", 7);
      executeJSFunction(image, "greyscale");
      executeJSFunction(image, "write",  "path_to_output");
      image.release();
      return null;
    }
  });
  executeJSFunction(jimp, "read", "path_to_image", callback);
		
  while(nodeJS.isRunning()) {
    nodeJS.handleMessage();
  }		
  callback.release();
  jimp.release();
  nodeJS.release();
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
JVM调优工具命令详解》是一份预习资料,主要介绍了Java虚拟机(JVM)调优过程中使用的一些工具命令。这些工具命令可以帮助开发人员诊断和优化JVM的性能问题。 文中首先介绍了常用的JVM调优工具命令,包括jps、jstat、jinfo、jmap、jhat等。这些命令可以用于查看JVM进程信息、统计JVM内存和线程情况、获取JVM配置参数等。通过使用这些工具命令,开发人员可以快速定位JVM性能瓶颈所在,进行优化。 接下来,文中详细介绍了每个工具命令的使用方法和参数解释。例如,jstat命令可以用于查看JVM内存情况,包括堆内存使用量、垃圾回收情况等。而jmap命令可以用于生成堆内存转储文件,帮助开发人员分析内存泄漏问题。通过掌握这些工具命令的使用,开发人员可以更加高效地进行JVM调优。 此外,文中还介绍了一些实际的调优案例,通过使用这些工具命令来解决实际的JVM性能问题。这些案例包括内存泄漏、线程死锁、CPU占用过高等问题。通过学习这些案例,开发人员可以更好地理解如何利用工具命令来诊断和解决JVM性能问题。 总的来说,《JVM调优工具命令详解》是一份非常实用的预习资料,适合那些需要深入学习JVM性能优化的开发人员。通过学习和掌握这些工具命令,开发人员能够更加高效地进行JVM调优,提升应用程序的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╰つ゛无名小姐‭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值