首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当你说"这种语言在JVM上运行"时,它真正意味着什么?

这意味着该语言已经编译成Java字节码,并在Java虚拟机(JVM)上运行。Java是一种面向对象的编程语言,它具有跨平台兼容性,可以在不同的操作系统和硬件平台上运行。在JVM上运行的语言通常具有更好的性能、安全性和可移植性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java与c++内存泄露的问题

,什么都需要自己考虑,而java在内存回收上有垃圾回收机制,在可用性上比c++要好一点,但是java的内存泄露却更加的隐蔽,今天我来谈谈java与c++内存泄露的区别: 1.c++的内存泄露的概念很简单...,如果说你这个方法运行的时间很短,那么当你方法调用完方法的时候这个对象自然变成了可回收的对象。...有很多人问为什么一个方法,运行完毕,那么它内部的局部实例就都会被回收呢,原理是这样的一个线程对应着一个jvm栈,而线程中的方法对对应着jvm栈中的一个栈帧,当调用这个方法的时候,栈帧就会入栈,方法运行完毕后栈帧就会出栈...,为什么会说可能会出现内存泄露呢,是因为jvm的某种机制,就可能不会出现内存泄露,上面不是说,局部变量都是存放在局部变量表中吗,局部变量就存储在slot槽当中的,当你对象超出了作用域之后,slot槽中的引用并不会消失...,c++太灵活,易用性比较差,但是所展现的问题比较清晰,而java比较规整,并且是真正的oo语言,所以易用性更加好一点,但是它存在的问题也就比较复杂,比较隐蔽的,如果不深究这些问题是很难发现的。

72410

零成本异步 IO (上)

它使用的是异步 I/O ,这意味着它得是一个异步函数,而不是普通函数,因此当你调用它时,你可以异步等待(await)它;然后我们看一下函数的实现,首先是用用户名参数拼接出要执行的 SQL 语句,然后是查询数据库...也就是说零成本抽象有两个方面: 该功能不会给不使用该功能的用户增加成本,因此我们不能为了增加新的特性而增加那些会减慢所有程序运行的全局性开销。 当你确实要使用该功能时,它的速度不会比不使用它的速度慢。...通常 I/O 处于阻塞状态,因此当你使用 I/O 时,它会阻塞线程,中止你的程序,然后必须通过操作系统重新调度。阻塞式 I/O 的问题是当你尝试通过同一程序提供大量连接时,它无法真正实现扩展。...,使用这种方式时,你可以指定在 Future 被解决之后运行什么回调函数。...也就是说, Future 负责弄清楚什么时候被解决,无论你的回调是什么,它都会运行;而所有的不便也都建立在此模型上,它非常难用,因为已经有很多开发者进行了大量的尝试,发现他们不得不写很多分配性的代码以及使用动态派发

59420
  • “老而不死”的三种编程语言

    最近,我仔细研究了当某种编程语言、工具或趋势被宣布“死亡”时,它到底意味着什么。我认为,从技术行业的不同方面来谈论死亡,似乎既是个人作为开发者的身份和价值观的信号,也是对特定事物现实的准确描述。...但是,当你考虑到这是一个不仅仅包含变革和创新的行业,而是一个依赖于其价值的行业时,你就会开始发现 Java 占据有点奇怪的空间已经有一段时间了。 1. 为什么人们认为 Java 已经死了?...当你考虑到所有其他一切因素时,庞大的社区意味着更多的支持,一个由框架、库和其他工具组成的广泛生态系统(注意,Spring Boot 的增长是对微服务革命的回应)。...在很长一段时间里,它在 Web 开发领域一直处于 PHP 之后的位置,因为它是如此的不稳定,于是开发人员对它的态度有些轻蔑,好像它不是一种“真正的语言”一样。...从本质上讲,这种想法认为,进入的门槛更低,这意味着使用 JavaScript 进行 Web 开发的人将会更少。

    86820

    Java中finalize()用法

    垃圾回收器 在 C/C++、Pascal和其他几种多种用途的编程语言中,开发者有责任在内存管理上发挥积极的作用。例如,如果你为一个对象或数据结构分配了内存,那么当你不再使用它时必须释放掉该内存。...在 Java 中,当你创建一个对象时,Java 虚拟机(JVM)为该对象分配内存、调用构造函数并开始跟踪你使用的对象。...当你停止使用一个对象(就是说,当没有对该对象有效的引用时),JVM 通过垃圾回收器将该对象标记为释放状态。...如果finalize() 不是析构函数,JVM 不一定会调用它,你可能会疑惑它是否在任何情况下都有好处。事实上,在 Java 1.0 中它并没有太多的优点。...但是在Java中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的。 那么finalize()究竟是做什么的呢?

    2.5K30

    Java之父接受Evrone专访:您需要的软件可靠性越高,静态类型语言的帮助就越大

    而在这种从 8 到 9 过渡的特殊情况下,这意味着平台可以切片和切块,您实际上可以进行自定义包装,这样 Java 运行时环境就会更小。...但如果你正在做的事情是......说,你是一个物理学家,你想找出一些计算的结果,它只需要运行一次。这取决于你正在做的工作的背景。您对软件的可靠性要求越高,静态类型语言的帮助就越大。...想象一下这样的环境,你可以说“等待这个”和“等待那个”,他们会在你被动让步的情况下进行这种透明的控制反转。这为您提供了看起来很像真正线程的语法外观。但这意味着您可以避免真正线程中的许多棘手问题。...当我们谈论不同的语言时,在您个人看来,现在教新软件开发人员的最佳语言是什么,作为他们的第一语言?也许在研究生院或大学。 James:我显然有偏见。Java 已经以这种方式成功使用了很长时间。...如果您打算成为一名全面的软件开发人员,在其中构建某种大型、高性能系统,那么很难击败任何在 JVM 上运行的语言。而且我实际上并不关心您在 JVM 上使用哪种语言。

    58730

    大白话说Java泛型:入门、使用、原理

    这是因为我们在存入的时候,第二个是一个 Integer 类型,但是取出来的时候却将其强制转换为 String 类型了。Sun 公司为了使 Java 语言更加安全,减少运行时异常的发生。...当 JVM 进行类编译时,会进行泛型检查,如果一个集合被声明为 String 类型,那么它往该集合存取数据的时候就会对数据进行判断,从而避免存入或取出错误的数据。...而在运行时阶段,JVM 通过初始化知道了它指向了一个 Apple 对象,所以其在运行时的类型就是 Apple 类型。...extends Fruit> plate = new Plate(); 这样子的话,在我们还未具体运行时,JVM 并不知道我们要往盘子里放的是什么水果,到底是苹果,还是橙子,还是香蕉,完全不知道...既然我们不能确定要往里面放的类型,那 JVM 就干脆什么都不给放,避免出错。 正是出于这种原因,所以当使用 extends 通配符时,我们无法向其中添加任何东西。 那为什么又可以取出数据呢?

    86960

    2020最全Java面试题--基础篇

    字节码就是虚拟机的机器指令,它与平台无关,有统一的格式,不依赖于具体的硬件环境,只运行在 JVM 上。JVM 在执行字节码文件时,把字节码解释成具体的机器指令执行。...堆:堆创建了一个运行时,它包含在其中分配对象的运行时数据区域。 栈:栈在运行时存储局部变量和部分结果。 它还有助于方法调用和返回值。 每个线程在创建线程时都会创建一个私有JVM栈。...为什么说Java是“write once and run anywhere”的语言? 你可以在Windows平台编写Java代码,同时在Windows上编译它。...在Windows上编写的类和jar文件能够运行在Unix环境下。所以Java是真正的平台无关的语言。 所有这些可移植性的背后是Java字节码。 Java编译器生成的字节码可以由任何JVM解释。...如果我们将方法设置为抽象方法,则意味着它没有主体,应在子类中实现。 但是,当使用new关键字时,将隐式调用构造函数。 因此,它需要一个body。

    58331

    程序员应该多写“坏”代码

    二、现代编程语言在设计阶段已经规避了很多的曾经让人糟心的东西 这就是为什么我们再也看不到宏、goto语句或显式内存管理了。...只有当你潜心研究一些烦人的C/C++代码时,你才能真正领略到具备垃圾收集特性的语言的魅力。在那之前,你能做的就是想象一下当年的痛苦。...对单例设计模式的恨意,只有那些曾经写过并面对与之相关的诸多问题(如编写测试用例)的人才能真正理解。 教材上的案例和现实中的经验相差甚远。前者不过是一种提示,真正改变你的编码方式的则是后者。...我们大多数人在初学之时,都是在没有Git或Unit Tests的情况下进行编码。这些项目往往有很多bug,而且经常不能运行。没有Git,你无法知道自己不小心改了什么。...这里用“曾经”是因为当你意识到愚蠢时你会改变它,没错吧? 下面就为大家列举一下业余时间可以做的事情。 1.

    7834210

    别开玩笑了,它明明一直很火

    “在 2018 年前后,随着 Java 9 和发布周期的增加,Java 真正迎来了它的高潮,”他说。“更小但更频繁的版本发布确实效果不错。”...来自 JVM 生态系统的推动 再次回顾过去,我们还可以指出,在 Java 虚拟机(JVM)上运行的两种语言 Kotlin 和 Scala 是 Java 所谓复兴的参与者。...与此同时,对于任何一种语言来说,产生的风险都可以作为一个积极的证据,证明该特性可以在 JVM 上按预期运行,且不会导致系统崩溃。...“在 JVM 上使用其他语言是一种非常好的方法,可以看出哪些新颖的想法可以在各自的社区中得到关注,而不必立即尝试将它们嵌入到 Java 中。”Topić说。...Lee 说,她没有把 Kotlin 和 Java 看成一场零和游戏,即一种语言的普及意味着另一种语言的衰落,她认为这两种语言是共生共存的。毕竟,它们实际上可以在同一个应用程序中并肩存在。

    23220

    JVM并不是那么重量级

    这是令人羞愧的,真正令人谦卑的。在这个世界上,我感觉自己像一个陌生人,我已经参与了这么长时间。 回到JVM的声明重。 你怎么衡量它? 当你下载JVM时,下载文件的大小就是JDK的大小吗?...当你运行JVM时,它会占用很多资源吗? 这些lib库文件是否消耗了大量的磁盘空间? 这是一种正式的部署吗? 它会让你每天的节奏都慢下来吗?...与JVM的日常工作 我在我的的2012 MacBook Pro上运行了至少5个JVM进程,内存为8GB。我从来没有尝试过同时启动5个Rails应用程序。 为什么同时开启5个?...但是,如果你在10个月前告诉我我将会这么做,我就会嘲笑你。在正确的思路下谁会运行5个或更多的JVM进程呢?我可以很自信地说我肯定不是唯一的一个。 哦,但是class paths和其他疯狂的东西呢?...Figwheel在没有问题的情况下可以连续运行数天。 结论 在将JVM作为目标判断之前,要非常小心。当然可以将Java作为一种语言来判断,但是要将它与虚拟机隔离开来。 我曾经也和你有一样的想法。

    1.7K50

    CLR与JVM

    除此之外,这种系统抽象有两种不同的实现方式。 系统虚拟机作为全功能操作系统存在,通常创建为替代使用物理机器。通过这种方式,多个环境可以同时在同一台机器上运行。...但是,这听起来不像我们熟悉的CLR和JVM。 公共语言运行时(CLR)和Java虚拟机(JVM)都是进程虚拟机。这意味着它们不是执行整个操作系统,而是专门设计用于运行流程或程序而不依赖于平台环境。...相反,CLR最初设计为仅在Windows操作系统上运行,而JVM始终与操作系统无关。众所周知,随着发展16年微软发布.netcore,现在有了在Linux和Mac上运行的CoreCLR。...这导致了这样一个情况,即在大多数情况下,CLR和JVM之间的差异也是使用它们的语言之间的差异。或者,也可以说语言之间的一些最重要的差异。...基本上,这意味着CLR识别例如List 和List 之间的区别,而JVM则不能(Java实现的泛型是作为编译器的一部分,换句话说他只是语法糖,而没有真正的在执行期间判断类型,往往用

    54730

    为什么你要学习 Go?

    这些语言大多数都支持多线程。但真正的问题是并发执行,线程锁、竞争条件和死锁。这些问题都使得很难在这些语言上创建一个多线程的应用程序。 例如,在 Java 中创建新的线程会消耗大量内存。...Go 直接在底层硬件上运行 与其他现代高级语言(如 Java/Python)相比,使用 C、C++ 的最大好处就是它的性能,因为 C/C++ 是编译型语言而不是解释型语言。 处理器能理解二进制文件。...通常来说,当你编译一个用 Java 或者其他基于 JVM 的语言构建的应用程序,它将人类可读的代码编译为字节代码,这可以被 JVM 或者在底层操作系统之上运行的其他虚拟机所理解。...Go 做到了两全其美,Go 像一些低级别的语言(如: C/C++ )一样是一门编译型语言,这意味着它的性能几乎接近于低级别语言,它还用垃圾回收来分配和删除对象。...通过移除继承,Go 也使得理解代码变得很容易 (因为当你在看一段代码时不需要同时查看父类)。 没有构造方法。 没有注解。 没有泛型。 没有异常。

    57711

    程序员摸鱼指南:副业成就未来

    在 2008 年,Sun 大约 40~50% 的资金来自运行 Java 的各个银行。当银行因为抵押贷款欺诈而倒闭时,Sun 的一大笔收入几乎在一夜之间蒸发殆尽。...如果副业是用另一种编程语言完成的,当你用新语言找到更好的职位时,你就可以选择离开。你也可以把这些副业转化为你自己的新业务。...你只不过是机器上的一个小小齿轮,没有直接证据可以证明你在大多数公司做过什么。如果在 eBay 只用 iframe 完成所有的工作,找新工作时就只得撒谎了。...你对这种语言的使用是非常特殊的,并且还是为这家公司量身定做的,它基于错综复杂的历史,这使得它与其他人对这门语言的使用相比,显得很奇怪(因为其他人也都认为自己对这种语言的使用是标准的)。...我能理解为什么有些程序员新手认为编程只是他们的第一份工作中要做的事情,但实际上,它远不止这些。当你掌握了这项技能,你甚至可以让你的生活实现自动化。

    65120

    深入剖析Lambda表达式的底层实现原理

    目前我自己的JVM也已支持Lambda表达式。上个我自己的JVM运行Lambda的执行日志给大家瞧瞧哪些问题呢:我们写的Lambda表达式代码,经编译系统编译后是什么样子的?...后来JDK支持了匿名内部类,对于需要实现方法比较少的接口,就直接采用这种方式实现了。一切都显得如何和谐自然。巴特,重复代码如此严重,免不了被其他语言嘲讽。...Lambda表达式的实现依托三个东西:匿名内部类(VM Anonymous Class)invokedynamicMethodHandle可以这样说,在Lambda表达式诞生之前,它依托的技术JVM中就已经全部支持了...当你真正改变了思维,成为了这样的人,你会发现,别人看你的眼光、你慢慢能够获得的,真的会不一样。做任何事情,成功的都是回归了人之初心的人。任何的理性、功利心…最终都会走向失败。...那JVM在执行Lambda表达式的代码时,是如何将这些元素结合起来的呢?接着往后看。如何实现调用在网上看相关文章的时候,看到一张图,直接拿过来用了。

    64531

    如何看待 Kotlin 成为 Android 官方支持开发语言?

    成为 Android官方开发语言意味着什么 官方:工具支持(Android Studio 3.0附带Kotlin),官方的宣传(教学视频,主题演讲等) 对于社区来说,Kotlin版本的库和框架如雨后春笋般涌现...Kotlin是空指针安全的,JetBrains做了一件很聪明的事情,它们将运行时才能空指针的检测提前到了编译时,主要方式是增加了Any?...很多人说Kotlin无非就是很多语法糖,没什么突破 没错,Kotlin是有很多很多的语法糖。...Lambda,它是不可能编译成invokedynamic指令的,因为那样会导致在JVM6上根本无法识别,所以经常通过翻译成内部类的形式来实现。...它很适合 Android,因为大多数的 Android 的程序员是做工程。 基于JVM没有什么不好 Kotlin,是基于JVM的编程语言,但是基于JVM的编程语言并没有什么不好。

    41520

    编程之魂之C# – 与C#之父Anders的访谈

    如果回到二三十年前,你可以说语言支配着你的经验曲线。学习一种编程环境几乎就是学习这种语言的一切。然后,这种语言有一个小的运行时库。如果你能学到操作系统那里的话,操作系统可能还有一些内容。...相反这意味着,如果不是创建一 种新的编程语言,你可以在现有的编程语言上进行发展演进,然后这种“综合的产品”看起来很不同,因为你已经包含进去了90%的内容。事实上,你已经包含进去岂了100%的内容。...在某些方面,当你创建内部DSL时,实际上你想要限制可以使用通用编程语言来做的事情。您希望能去除语言的通用性,而且你只想让DSL具备这种功能。现在,通用编程语言在这方面并不擅长。...这种语言感觉像什么呢?当你用这种或者那种语言编程,脑子里想些什么呢?它们又有怎样的不同呢?对于人们来说,什么更容易理解,什么很难理解呢?我认为我们并不能度量这些东西。 它从来不是很科学的。...我已经看见过很多人在争论动态语言时说的是Smalltalk的浏览器。 Anders: 我不确认我会买这个账。当你的问题足够小时,它是对的,在Smalltalk刚出现时它一向只是一个足够小的问题。

    83920

    Chicory:编写WebAssembly克服JVM缺陷

    同样,JVM 也只在存在 JVM 端点的地方才能一次编写,随处运行,这与 WebAssembly 模块不同,理论上 WebAssembly 模块应该能够在任何能够运行 CPU 指令集的设备上运行。...它的创建是为了让 WebAssembly 程序能够在没有原生依赖项或 Java 本地接口 (JNI) 的情况下运行。“Chicory 可以在 JVM 可以运行的任何地方运行 Wasm。...模块可以通过在字节码格式中列出“导入”函数来请求功能。此导入可以使用用 Java 编写的宿主函数来实现。无论模块的语言是什么,模块都可以在需要时调用此 Java 函数。...这种方法使企业应用程序(通常很重且复杂)能够轻松地使用轻量级系统进行扩展。它只需导入一个库,并使应用程序能够加载和运行 Wasm 代码。Peruffo 说,这种功能非常有用。...设置 虽然我还没有能够在我的 Windows 笔记本电脑上加载和运行 Chicory,但请继续关注有关如何设置和运行它的评论。

    12910
    领券