java动态语言_探秘Java 7:JVM动态语言支持详解

JDK 7 增加了对 JSR 292 的支持,在 JVM 中动态类型语言的运行速度将变得更快。这一支持的关键在于增加了新的 Java 字节码,invokedynamic,它用于方法调用,还有新的连接机制,其中包含了一个新的构造:方法句柄(method handle)。此次JDK 7在动态语言支持上的更新是Java平台发展的重要趋势之一,在今年6月的JavaOne大会上,这些基于Java平台的动态语言也十分的活跃。

动态类型语言和 JVM

JVM 可以执行 Java 程序,将其编译机器独立的字节码。事实上,任何可以使用有效 class 文件表述的功能性语言,都可以运行在 JVM 上。

多年来,运作在 JVM 上语言一直在增加,从 armed Bear for Common Lisp 到Yoix.动态语言的 JVM 实现也越来越多,比如 JRuby 和 Jython,以及 Groovy 脚本语言。

动态语言的灵活性,尤其是脚本语言,对于实验性、原型应用程序以及需频繁更新的程序,都具有独特的吸引力。这种灵活性源自动态类型。动态类型语言中运行时(runtime)验证程序中的值是否与预期类型一致,相对的,静态类型语言,如 Java,是在编译期间检查变量类型,而不是值类型。值得一提的是,Java 平台上另一个前景很被看好的静态语言就是Scala:包括Java之父和Groovy创始人在内的很多开发者都很看好Scala这个强类型的、可扩展性良好的静态语言。

通常,动态类型比静态类型更具灵活性,因为前者允许程序根据运行时的数据生成类型。不过静态类型语言的执行更为高效,因为它能够在编译期间排除错误。

动态类型固有的灵活性与 JVM 的执行效率,合二为一。很明显,这就是它能够吸引动态编程语言创建者以及使用这些语言构建应用程序的开发者的原因。

JSR 223 动态语言支持的第一步

JSR 223: Scripting for the Java Platform 是将动态语言引入 JVM 的第一步,它是一个规范,定义了从动态脚本语言代码访问 Java 代码的 API 接口。它还指定了一个 framework 框架,用户在 Java 应用程序中运行脚本引擎。该规范及其实现使得包含 Java 和脚本代码的应用程序的创建更为容易。

动态类型语言的问题

为运行在 JVM 上的动态类型语言开发引擎,必须满足 JVM 所执行的 Java 字节码的要求,而字节码专为静态类型语言设计。对于引擎开发者,当生成字节码用于方法调用,这种设计一直都是棘手的难点。

方法调用的字节码要求

静态类型语言中编译时进行类型检查,意味着方法调用,以及它生成的字节码,需要知道该方法返回的值类型,以及调用中指定的参数类型。

下面为一段 Java 代码:

String s="Hello World";

System.out.println(s);

这里参数类型是已知的。System.out.println()并不返回值,如果方法返回值,需要指定返回值的类型。

以上代码相应的字节码如下:

ldc #2astore_1

getstatic #3aload_1 invokevirtual #4//Method java/io/PrintStream.println:(I)V

JVM 中字节码的执行通常包含对操作对象栈(operand stack)中值的操作。操作栈是一个相当于硬件寄存器的虚拟机。通常,字节码会指示 JVM 局部值压入操作对象栈,将值从栈中取出放进局部变量中,复制或交换栈中的值,或者执行生成或使用值的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 反射机制 视频_JAVA反射机制及其原理实现

9.1 概念JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;public、protected、private。OO(面向对象),private私有的&#x…

python模型的属性是什么_python – Django:为什么Django模型字段的类属性?

不,原因与此相同:>>> class Foo(object):... bar Foo attribute...>>> f Foo()>>> f.barFoo attribute>>> Foo.barFoo attribute>>> f.bar instance attribute>>> f.barinstance attribute>>> F…

java 安卓下载文件_GitHub - Charay/downloadfile: 使用Retrofit2+Rxjava+Rxandroid+okhttp的方式下载文件并存储到sd卡指定目录...

downloadfile使用Retrofit2RxjavaRxandroidokhttp的方式下载文件并存储到sd卡指定目录使用:gradleStep 1.在工程build.gradle文件中加入maven地址repositories:allprojects {repositories {...maven { url https://jitpack.io }}}Step 2. 在module的build.gradle中添…

java map 队列_Java:queue队列,map集合

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口示例代码:1. import java.util.Linke…

java溢出怎么处理_java数据溢出怎么处理?

publicstaticvoidmain(String[]args){//TODO自动生成的方法存根ScannerscnewScanner(System.in);Stringaasc.nextLine();sc.close();floatdn0,xn0,kn0,sn0,qn0;for(inti0;i<a...public static void main(String[] args) {// TODO 自动生成的方法存根Scanner scnew Scanner(S…

java基础 最重要的部分_Java基础(1)最基础的部分

本文章均为自己在自学期间整理的笔记&#xff0c;2020年四月份开始学习Java&#xff0c;如有不足&#xff0c;请补充。希望对各位小伙伴都能有帮助。1.Java中public class和class区别&#xff1a;1)在一个Java文件中可以定义多个class 2)public的class不是必须的 3)public修…

logstash mysql增量_Logstash jdbc 按时间增量更新的一些总结

不同数据库的支持mysql数据类型显示样例是否支持timestampstatementtracking_columntracking_column_typeSQL示例date2020-10-20Nselect *, datediff(date, 1970-01-01) as days from tbl_time where datediff(date, 1970-01-01) > :sql_last_valuedaysnumericselect *, dat…

用java编写奖金税率_企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%_java企业利润提成计算代码...

今天上java课程的时候老师给布置了一个作业&#xff0c;让让java计算一下企业该发放的奖金总额&#xff0c;接下来吾爱编程就为大家介绍一下java实现企业发放的奖金根据利润提成的代码&#xff0c;有需要的小伙伴可以参考一下&#xff1a;1、题目如下&#xff1a;企业发放的奖金…

java 多线程工具_多线程测试工具groboutils的使用

public class FaultServiceTest extends TestCase {/*** param args* throws FaultException* throws ExpParamNotFoundException* throws ParseException*/private IFaultService faultService;private static final int NUM_THREAD 100; // 测试线程总数public FaultService…

java提取多行嵌套div/div内容的正则表达式_提取某一段div标签之间内容的正则表达式怎么写...

满意答案public static void main(String[] args) {String source"\">是大家是否gt;士大夫士大夫";StringBuilder resultnew StringBuilder();System.out.println("开始匹配文字内容");String patternStrs"()(.?)()";Pattern patternPa…

阶乘取模算法java_np问题(大数阶乘取模)

np问题题目描述&#xff1a;LYK 喜欢研究一些比较困难的问题&#xff0c;比如 np 问题。这次它又遇到一个棘手的 np 问题。问题是这个样子的&#xff1a;有两个数 n 和 p&#xff0c;求 n 的阶乘对 p 取模后的结果。LYK 觉得所有 np 问题都是没有多项式复杂度的算法的&#xff…

Java读取hdfs目录下所有文件_Java API 读取HDFS目录下的所有文件

/*** 获取1号店生鲜食品的分类id字符串* param filePath* return*/public String getYHDSXCategoryIdStr(String filePath) {final String DELIMITER new String(new byte[]{1});final String INNER_DELIMITER ",";// 遍历目录下的所有文件BufferedReader br null…

python django 表单_Django ModelForm与Form

django表单系统中&#xff0c;所有的表单类都作为django.forms.Form的子类创建&#xff0c;包括ModelForm关于django的表单系统&#xff0c;主要分两种基于django.forms.Form基于django.forms.ModelForm表单API表单有两种状态&#xff0c;绑定&#xff0c;未绑定 Form.is_bound…

java获取2017年第39周_对输入计算机的数据进行审核,可采用()进行审核。A.抽查B.屏幕审核C.凭证清单和屏幕审核D.凭证清单...

参考答案如下对输的数单和薄基底膜肾病主要的遗传方式为A.常染色体显性遗传B.常染色体隐性遗传C.性染色体显性遗传D.性染色儿童的情感发展遵循若干的阶段,比较后出现的是()。A、入计惊讶B、好奇C、恐惧D、哀和乐算机审核智商和情商完全可以分开。()人格不包括以下哪个方面&…

php解析bt,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

本文实例讲述了PHP基于闭包思想实现的torrent文件解析工具。分享给大家供大家参考&#xff0c;具体如下&#xff1a;PHP对静态词法域的支持有点奇怪&#xff0c;内部匿名函数必须在参数列表后面加上use关键字&#xff0c;显式的说明想要使用哪些外层函数的局部变量。function c…

php excel header,【IT专家】PHP生成excel,方法一-header生成

本文由我司收集整编&#xff0c;推荐下载&#xff0c;如有疑问&#xff0c;请与我司联系PHP生成excel&#xff0c;方法一:header生成2018/02/09 444 public function export_order() { //搜索条件$where ‘where 11 ‘; $consignee I(‘consignee’); if($consignee){ $where…

discuz php源码,Discuz7 php源码,该如何解决

PHP code$_value) { $_key{0} ! _ && $$_key daddslashes($_value);}}//过滤$_FILES,也就是添加引用if (!MAGIC_QUOTES_GPC && $_FILES) {$_FILES daddslashes($_FILES);}//初始化一些变量$charset $dbs $dbcharset $forumfounders $metakeywords $extr…

php显示html表单内容,HTML表单是什么?HTML表单内容的详细介绍(附代码)

HTML 表单是用于搜集不同类型的用户输入的&#xff0c;表单是一个包含表单元素的区域&#xff1b;表单元素是允许用户在表单中(比如&#xff1a;文本域、下拉列表、单选框、复选框等等)输入信息的元素&#xff1b;表单使用表单标签()定义。一、介绍1.表单概念&#xff1a;表单最…

matlab分数约分,分母

3.10c语言自学2021-03-10 19:51:18https://s4.51cto.com/images/blog/202103/10/489602174c3d2e1deb2f94bc7944366c.png?x-oss-processimage/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk)term-termxx/(n(…

php中metadata,模型元数据(Models Metadata)

To speed up development Phalcon\Mvc\Model helps you to query fields and constraints from tables related to models. To achieve this, Phalcon\Mvc\Model\MetaData is available to manage and cache table metadata.Phalcon\Mvc\Model 能帮助你查询字段从表关联到模型和…