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

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

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

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

相关·内容

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

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

71110

零成本异步 IO (

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

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

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

    85920

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

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

    57730

    Java中finalize()用法

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

    2.5K30

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

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

    84960

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

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

    57531

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

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

    7744210

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

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

    22520

    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实现的泛型是作为编译器的一部分,换句话说他只是语法糖,而没有真正执行期间判断类型,往往用

    52230

    什么你要学习 Go?

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

    57311

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

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

    40020

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

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

    63120

    Chicory:编写WebAssembly克服JVM缺陷

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

    10810

    什么Viable使用Next.js和Node.js进行AI应用开发

    “我看到的另一件事是,人们经常在与这些 AI 互动遇到困难,因为需要一定的学习曲线才能理解它们如何‘思考’。” 这就是为什么真正重要的是向客户提供有关他们要求 AI 做什么的反馈,他补充。...Erickson ,Next.js 可以轻松地 UI 中的新页面中启动新的 API 端点。与 Express 等其他开源选择相比,这要容易得多,他补充。 “基本就是这样做的,”他。...它也非常擅长处理异步数据处理,他补充。使其出色的是,它以异步方式运行,这意味着基本上有一个代码运行时发生的运行时循环。 “它可以暂停进程的执行,”他。...“拉入更多的数据,这意味着的多任务处理能力实际比许多其他编程语言要好得多。使用 Node ,你比使用其他东西更少地考虑多任务处理。”...“如果你与 ChatGPT 或任何东西聊天,当你这样做,你实际可以看到文本正在流入,”他。“它不喜欢有一个小的加载指示器,然后一次性输入所有文本。

    9210

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

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

    80520
    领券