Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java虚拟机语言是不可知的吗?

Java虚拟机语言是不可知的吗?
EN

Stack Overflow用户
提问于 2011-09-20 14:39:49
回答 4查看 991关注 0票数 10

可以肯定地说,Java虚拟机“最初”是为Java编程语言设计的,但现在,其他开发人员已经能够编写编译为Java字节码的编程语言,如Scala、Jython和JRuby。

在Java字节码中仍然有“面向对象”的引用,比如接口、方法、字段。例如,invokespecial是对“object”方法的调用。

它不是一个纯语言不可知指令集的纯堆栈虚拟机。例如,纯FORTH实现将只有堆栈操作。

问题是,JVM语言是不可知的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-20 15:09:02

在JVM和java字节码是图灵完成的意义上,任何其它图灵完成语言都可以被转换和编译成java字节码并在JVM上运行。它的效率可能非常低,但也不是不可能。至于“不可知论者”的最严格的定义,没有这样的事情。在硬件级别,所有处理器都有一组定义的二进制指令,因此在某些情况下,任何语言都必须转换为与其应该在其上执行的硬件兼容的汇编。

编辑: JVM不是在真空中开发的,它是与JAVA编程语言一起开发的,因此Java语言很大程度上影响了Java字节码和JVM的设计。因此,在这个意义上,您可以说JVM在设计时就考虑到了Java。但在体系结构中,JVM有意识地与Java语言解耦(通过中间字节码格式),因此在设计中有一些元素考虑了可能的替代语言。

票数 4
EN

Stack Overflow用户

发布于 2011-09-20 14:42:42

JVM绝对不是语言不可知的,有些语言不能在JVM上有效地实现。例如,JVM没有提供内存寻址操作,因此实现像C这样的低级语言将是非常低效的。但它的原语集能够支持许多流行的语言,具有不同于Java的功能,只要有一个适当的智能编译器。可以很好地实现的语言不一定只是加了语法糖的Java;当然,与Java的差异越大,实现这种语言就越困难

票数 9
EN

Stack Overflow用户

发布于 2011-09-20 14:51:54

JVM不是语言不可知的;但是,它的语言是JVM字节码。考虑虚拟机的组装,然后您将对JVM运行的内容有一个很好的了解。选择JVM字节码是为了方便Java程序的运行,但就像任何“足够完整”的程序集一样,它也可以用于许多其他用途。关键是编译过程中正在做什么。

其他语言障碍包括JVM是基于堆栈的机器的设计,这意味着显式地址对于字节码层中的JVM来说是无意义的。没有“加载”或“存储”操作;然而,这并不能阻止那些想要在JVM上实现寻址的语言的人。这只会让那些想要寻址的人变得更加困难。

要在JVM上进行寻址,基本上需要编写一个模拟器;在模拟器中,您有一个包含"address To object handle“查找表的对象。这允许您通过在缺乏寻址的虚拟机上进行模拟来执行基本寻址。它并不总是很好,并且模拟的质量通常只扩展到模拟语言允许的用例。

是的,将(对象的)地址映射(对象到Java堆引用)到(在JVM内部) java堆引用到物理内存地址,确实会造成一些性能损失。但这就是保持平台不可知性所必须做的事情。如果您可以直接访问内存,那么您最终将不得不为不同的硬件平台编码,而不是为虚拟机编码。好吧,至少你会比现在更早地被推入特定于平台的代码中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7487045

复制
相关文章
替换HTML里面的内容
数据结构 let data = [{ id : "p-1",value : "P-1C"}, { id : "p-2",value : "P-2C" }]
tianyawhl
2020/12/22
3.2K0
html 转换为cshtml,使用Html而不是csHtml
我想使用纯HTML页面而不是使用MVC .net的cshtml . 但是当我通过右键单击索引添加视图时,我只能看到两个选项 .
全栈程序员站长
2022/09/10
2.5K0
JS如何替换元素内容
http://mpvideo.qpic.cn/0bc3eaajwaaa4qaelx3bjvrvaigdtmqabgya.f10002.mp4?dis_k=4cf17def14cb58de5ca3ebc
itclanCoder
2022/12/07
10.8K0
CA1826:使用属性,而不是 Linq Enumerable 方法
此规则在具有等效但更高效的属性的类型集合上标记 Enumerable LINQ 方法调用,以提取相同的数据。
用户4268038
2022/02/19
6200
html 中的可替换(置换)元素
在 CSS 中,可替换元素(replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。
用户9914333
2022/07/21
3.2K0
html中align属性
成员名称 说明 AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐。 AbsMiddle 图像的中间与同一行中最大元素的中间对齐。 Baseline 图像的下边缘与第一行文本的下边缘对齐。 Bottom 图像的下边缘与第一行文本的下边缘对齐。 Left 图像沿网页的左边缘对齐,文字在图像右边换行。 Middle 图像的中间与第一行文本的下边缘对齐。 NotSet
闵开慧
2018/03/30
2.9K0
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
部门编号通常由公司或组织的管理人员根据实际情况进行规划和安排,各个部门的编号应当具有独立性、唯一性和易于记忆等特点,以方便在日常管理活动中使用。
Designer 小郑
2023/08/01
2450
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
leetcode之单词替换
这里用双层循环使用startsWith来判断是否命中词根,如果是则替换,如果前面命中的词根不是最短的,则后面遇到会被替换掉,最后再将替换后的words数组拼接为sentence。
code4it
2020/10/14
4690
leetcode之单词替换
leetcode之单词替换
这里用双层循环使用startsWith来判断是否命中词根,如果是则替换,如果前面命中的词根不是最短的,则后面遇到会被替换掉,最后再将替换后的words数组拼接为sentence。
code4it
2020/11/02
3940
Html中table的属性总结
border= “1”:给整个表格(包括表格及每一个单元格)加上1像素的黑色边框, 其等同于css中的: table,table tr th, table tr td { border:1px solid #0094ff; }
用户2323866
2021/06/24
1.8K0
HTML页面中的lang属性
lang属性的取值应该遵循 CP 47 - Tags for Identifying Languages
李郑
2018/03/01
3.3K0
为什么要用Getter和Setter方法,而不是公开属性
大多数字段的访问都是通过Getter和Setter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者的未来可能性。当我在Java语言编程中开始我的职业生涯时,我就对Getter和Setter感到困惑。为什么要这么写呢?为什么不直接用Public呢?这对我来说是个奇怪的语法。
三哥
2018/12/17
2.2K1
为什么要用Getter和Setter方法,而不是公开属性
Flutter中的html内容加载
上一篇文章Flutter 中的下拉刷新和上拉加载中,我介绍了如何在Flutter中实现下拉刷新和上拉加载的效果,今天我们继续以上文中的代码为例,来介绍如何加载HTML文档内容。
拉维
2019/09/10
16.7K1
Flutter中的html内容加载
770.单词替换 (stringstream)
浪漫主义狗
2023/09/04
1360
博客网站最终是要让用户看的是内容而不是功能
很多的博客站长们感觉都非常注重自己博客网站的功能上的扩展和折腾,往往忽略了真正重要的内容建设,今天给网站加个炫酷的功能,明天加个那样的功能,折腾来折腾去没有输出多少有价值的内容出来,整个网站给人感觉没有多少深度,自然也就没哟几个用户愿意多回头来看看了,无论坚持多久博客的流量都不会有多大的提升的。
明月登楼的博客
2019/05/15
4970
博客网站最终是要让用户看的是内容而不是功能
770.单词替换 (stringstream)
770.单词替换 (stringstream) 原题链接 描述: 输入一个字符串,以回车结束(字符串长度不超过 100)。 该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。 现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入格式 输入共 3 行。 第 1 行是包含多个单词的字符串 s; 第 2 行是待替换的单词 a(长度不超过 100); 第 3 行是 a 将被替换的单词 b(长度不超过 100)。 输出格式 共一行,输出将 s 中所有单词 a 替换成 b
浪漫主义狗
2022/07/11
5290
html中table表格里的内容如何居中「建议收藏」
<table border=”1″ style=”margin: auto;” width=’60%’>
全栈程序员站长
2022/10/02
11K0
react中添加html内容
直接用 小括号() 就可以,类似这样 state = { content:( <div> <p>Content</p> <p>Content</p> </div> ), }; ... render () { return ( <div> {this.state.cont
wo.
2021/06/15
5.2K0
单词替换,现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入一个字符串,以回车结束(字符串长度不超过 100100)。 该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。 现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入格式 输入共 33 行。 第 11 行是包含多个单词的字符串 ss; 第 22 行是待替换的单词 aa(长度不超过 100100); 第 33 行是 aa 将被替换的单词 bb(长度不超过 100100)。 输出格式 共一行,输出将 ss 中所有单词 aa 替换成 bb 之后的字符串。 输入样例: You
莫浅子
2022/11/18
8290
CA1829:使用 Length/Count 属性,而不是 Enumerable.Count 方法
对支持等效且更高效的 Length 或 Count 属性的类型使用了 Count LINQ 方法。
用户4268038
2022/02/19
4840

相似问题

如何替换/替换属性名称,而不是其内容

46

替换HTML注释的内容,而不是注释本身

11

替换html内容而不替换标记或属性- PHP

11

Javascript:如何替换字符串的内容,而不是HTML标记中的内容?

22

替换内容而不是附加内容。

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文