Java Nashorn--Part 1

来源:http://www.cnblogs.com/IcanFixIt/archive/2017/02/10/6387759.html
-Advertisement-
Play Games

伴隨 Java 8 的發佈,Oracle 也一同發佈了 Nashorn,它是在 Java 虛擬機上運行 Javascript 語言的一個引擎。Nashorn 的設計是為了替換最初的運行在 JVM 上的項目——被稱之為 Rhino(Nashorn 是 rhino 的德語中的詞語)。 Nashorn 完 ...


伴隨 Java 8 的發佈,Oracle 也一同發佈了 Nashorn,它是在 Java 虛擬機上運行 Javascript 語言的一個引擎。Nashorn 的設計是為了替換最初的運行在 JVM 上的項目——被稱之為 Rhino(Nashorn 是 rhino 的德語中的詞語)。
Nashorn 完全重寫和實現,謀求和 Java 的高效的交互性,精準地保證與 JavaScript ECMA 規範的一致性。Nashorn 是第一個達到 100% 遵從 JavaScript 的規範,並且在絕大部分工作量上運行速度是 Rhino 的20倍之多。

介紹Nashorn

在JVM 上運行的非 Java 語言

實際上,有很多非 Java 的語言運行在 JVM 上,有很多語言看起來不同與Java,例如 JavaScript。這就使 Java 和 JVM 保持松耦合提供了可能,並且真正通過類文件格式的定義進行交互。 這裡可以通過兩種不同的方式實現:

  • 源語言具有在Java中實現的解釋器。解釋器在 JVM上 運行,並執行以源語言編寫的程式。
  • 源語言附帶有一個編譯器,它從源語言代碼的單元生成類文件。生成的編譯類文件然後在JVM上直接執行,這通常需要一些額外的語言特定的運行時支持。
    Nashorn 採用第二種方法, 但是增加了細化,編譯器在運行時內部,所以JavaScript 源代碼從不在程式執行開始之前編譯。 這意味著不是專門為 Nashorn 編寫的 JavaScript 仍然可以輕鬆地部署在平臺上。

註意:
Nashorn 不像許多其他 JVM 語言(如JRuby),因為它不實現任何形式的解釋>器。 Nashorn 總是將 JavaScript 編譯為 JVM 位元組碼,並直接執行位元組碼。

Nashorn 的動機

Nashorn 在 Java 和 JVM 生態系統中提供多種用途。

  1. 首先,它為 JavaScript 開發人員提供了一個可行的環境來發掘 JVM 的強大功能。
  2. 第二,它使公司能夠繼續利用他們對 Java 技術的現有投資,同時另外採用 JavaScript 作為開發語言。
  3. 最後,它為 HotSpot JVM 中的高級虛擬機技術提供了一個偉大的工程展示。
    隨著 JavaScript 的不斷增長和應用,從瀏覽器的傳統首頁擴展到更通用的計算和伺服器端,Nashorn 在現有的堅如磐石的Java生態系統和有前途的新技術之間架起了巨大的橋梁。

在 Nashorn 下執行 JavaScript

接下來會介紹 Nashorn 的運行環境,還有兩種執行 JavaScript 的方式(這兩種方式都會在 JAVA_HOME 環境變數下的 bin 目錄里執行):

  1. jrunscript:執行以.js 結尾的 JavaScript 腳本
  2. jjs:一個更多功能的 shell - 適用於運行腳本和作為一個交互,實時代碼預覽功能環境以及探索 Nashorn 其他功能。
    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 剛下樓遛狗回來,想起來的時候已經過了凌晨... 房子已經面簽完了,下一步就是過戶了,一想到自己從此沒有輕鬆的日子過了就壓力山大 過年放假這幾天,我總算把自己的引擎的底層基礎類型,工具庫,IO系統調整完了,接下來要開始整理資源模塊了 我已經寫過四個正式上線項目的文件系統,打包,更新這一套邏輯和工具了, ...
  • Maven是個啥? Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理,並且Maven是跨平臺的,這意味著無論是在Windows上,還是在Linux或者Mac上,都可以使用同樣的命令。 構建(build)又是個啥? 每天來公司第一件事情就是拉取最新代碼,然後進行單元測試(如果失敗 ...
  • 有時遇到將數據傳輸對象轉換成JSON串會將屬性值為空的屬性去掉,利用Java反射實現JavaBean對象數據傳輸對象的相同屬性複製並初始化數據傳輸對象屬性為空的屬性,然後轉換成JSON串 package com.banksteel.util; import java.lang.reflect.Fie ...
  • 互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,Dubbo是一個分散式服務框架,在這種情況下誕生的。現在核心業務抽取出來,作為獨立的服務,使前端應用能更快速和穩定的響應。 第一:介紹Dubbo背景 大規模服務化之前,應用可能只是通過RMI或 ...
  • 原理:模板元程式由編譯器在編譯期解釋執行,利用模板特化機制實現編譯期條件選擇結構,利用遞歸模板實現編譯期迴圈結構。模板元編程(metaprogramming)意思是,編程系統將會執行我們所寫的代碼,來生成新的代碼,而這些新代碼才真正實現了我們所期望的功能。元編程最大的特點在於:某些用戶自定義的計算可 ...
  • STC12C5A60S2 一.根據晶元文檔連接物理電路,最小系統: 電路圖<>實物圖 二.根據usb下載器安裝驅動 1.先把usb下載器插到電腦,查看電腦設備管理,查看占用的com埠 如果設備未識別,需要安裝usb驅動 2.安裝keil編譯器 1>.新建一個工程,再新建一個源碼文件,再把文件添加 ...
  • 我們都知道,在開發中只要按照一定的規範去配置的話,我們的mybatis是不需要寫mapper介面的實現類的,那麼mybatis到底是如何實現了讓我們可以不用寫mapper的實體類的呢?這裡寫了一下自己的看法,歡迎各位大神指導。 ...
  • 一、校驗數字的表達式 數字:^[0-9]*$n位的數字:^\d{n}$至少n位的數字:^\d{n,}$m-n位的數字:^\d{m,n}$零和非零開頭的數字:^(0|[1-9][0-9]*)$非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$帶1-2位小數的正 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...