0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Java虚拟机发展史:深入理解Java虚拟机

如意 来源:百家号 作者:怡子科技 2020-07-01 11:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Java虚拟机发展史

从1996年初sun公司发布的jdk1.0中所包含的sun Classic VM到今天,曾经涌现或消失过许多经典和特色的虚拟机出现。Classic VM只能使用纯编辑器来执行。如果要使用jit编辑器必须使用外挂。执行效率和传统的c/c++程序有很大差异,“Java语言很慢”就是在这个时候在用户中树立起来的。

Sun公司努力去解决classvm的问题,为了提升运行效率,在jdk1.2使用了exact vm 它的执行系统已经具备现代高性能虚拟机的雏形。编译器和解释器混合工作模式。虽然比第一代先进了许多,但在商业中只存在了很短暂的时间就被hotspot vm所取代,甚至还没来的及发布windows和linx下的商用版本。

提起hotspotvm。它是sun jdk 和open jdk中所带的虚拟机,也是目前使用范围最广的Java虚拟机。继承了上两代虚拟机的优点。

热点代码和探测技术,hotSpot热点探测能力可以通过执行计数器找出最具有编译价值的代码,然后通过jit以方法为单位进行编译。

Java技术的未来是趋向于模块化的,技术平台越来越复杂,越来越庞大。当单一的Java开发无法满足当前软件的复杂需求,越来越多的Java虚拟机的语言开发被应用到我们的软件项目中。

如今,cpu硬件的发展方向已经从高频率转化为多核心,软件开发越来越关注并行编程的领域。Jdk1.5 引入了Java.util.concurrent包实现了粗粒度的并发框架。而1.7的forkjoin包则包含了对这个框架的一次重要扩充。Jdk1.8提供lambda 极大的改善了Java语言不适合函数式编程的现状。在几年之前,主流的cpu就支持64位架构了。,Java也早早地推出了支持64位的版本。

想要精通jdk内部的实现机制,最便捷的路径是自己编译一套jdk,虽然门槛高很多,但肯定比阅读书籍,文章更贴近本质,怎么获取jdk源码?Source bundle releases 获取打包好的源码。大概99M,解压后约 339M。

Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区。这些区域有各自的用途,有的区域随着随着虚拟机进程的启动而存在。有些区域则依赖于用户线程的启动和结束建立和销毁。

程序计数器是一块较小的内存空间,它可以看作当前线程执行字节码的行数指示器。每条线程都需要一个独立的程序计数器。线程之间计数器互不影响。如果线程正在执行一个方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址:如果正在执行native方法。这个计数器值则为空,此内存区域是唯一一个虚拟机没有任何outofmemoryError的区域。

Java虚拟机栈也是线程私有的,虚拟机栈是Java方法执行的内存模型,存储局部变量表,操作数栈,方法出口,动态链接等信息。如果线程请求的栈深度大于虚拟机所允许的深度,抛出stackOverFlowError。本地方法栈为虚拟机使用native方法使用。

Java堆是管理内存中最大的一块,是所有线程共享,存放对象实例。有的时候也被成为GC堆,采用分代收集算法,分为新生代和老生代 如果堆无法继续扩展并且实例无法内存分配。抛出outofmemoryError。方法区和堆一样,各个线程共享的内存区域。存储类信息,常量,静态变量,即时编译器编译后的代码等数据。运行时常量池是方法区的一部分。直接内存并不是虚拟机运行的一部分,也不是Java规范的内存区域,在jdk1.4加入nio,引入基于通道的缓冲区的I/o方式,它可以使用native函数库直接分配堆外内存,这样显著提高性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115628
  • 虚拟机
    +关注

    关注

    1

    文章

    968

    浏览量

    30160
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    搭建自己的ubuntu系统之创建ubuntu虚拟机

    打开VMware软件,点击创建新的虚拟机。进入以下界面:选择自定义,点击“下一步”。选择对应VMware版本的兼容性,版本可在帮助->关于VMware Workstation中
    发表于 09-25 09:39

    中软国际鸿云虚拟机安装指南

    鸿蒙电脑作为新一代分布式计算平台,凭借其卓越的多端协同能力和智能化特性,为高效办公提供了新选择。针对专业软件兼容性这一核心痛点,中软国际的鸿云虚拟机解决方案提供了务实的技术路径。作为专为鸿蒙生态打造
    的头像 发表于 06-23 16:31 2785次阅读

    TECS OpenStack资源池虚拟机网络二层地址无法互通的问题处理

    某运营商TECS OpenStack使用主机overlay SDN方案组网,运维人员在创建虚拟机测试虚拟机网络状态时发现问题:在其中一台主机上创建两台同网段虚拟机虚拟机之间二层地址无
    的头像 发表于 06-12 09:28 675次阅读
    TECS OpenStack资源池<b class='flag-5'>虚拟机</b>网络二层地址无法互通的问题处理

    hyper 备份,Hyper备份:虚拟机备份与恢复

    的解决方案。今天就为大家介绍Hyper备份:虚拟机备份与恢复。    在虚拟化环境中,备份和恢复虚拟机是确保数据安全和业务连续性的关键操作。Hyper-V提供了多种备份和恢复方法,帮助用户灵活地管理
    的头像 发表于 02-08 09:53 1408次阅读
    hyper 备份,Hyper备份:<b class='flag-5'>虚拟机</b>备份与恢复

    hyper-v虚拟机,为何需要用hyper-v虚拟机

    随着科技的飞速发展,各类任务与数据量急剧攀升,批量管理恰似航行在信息海洋中的坚固灯塔,照亮高效管理的航道。今天小编给大家分享为何需要用hyper-v虚拟机。 使用Hyper-V虚拟机的主要原因包括
    的头像 发表于 02-07 13:37 750次阅读
    hyper-v<b class='flag-5'>虚拟机</b>,为何需要用hyper-v<b class='flag-5'>虚拟机</b>?

    hyper v 上网,Hyper-V上网:虚拟机网络配置

    大家介绍Hyper-V上网:虚拟机网络配置。    在Hyper-V环境中,正确配置虚拟机的网络设置是确保虚拟机能够正常访问外部网络的关键。以下是详细的Hyper-V虚拟机网络配置指南
    的头像 发表于 02-06 10:29 4117次阅读
    hyper v 上网,Hyper-V上网:<b class='flag-5'>虚拟机</b>网络配置

    hyper cpu,Hyper CPU优化:提升虚拟机性能

    :提升虚拟机性能。    在虚拟化环境中,CPU性能优化对于提升虚拟机的整体性能至关重要。Hyper-V提供了多种工具和策略,帮助用户根据虚拟机的工作负载需求合理分配和优化CPU资源。
    的头像 发表于 02-06 10:25 1544次阅读
    hyper cpu,Hyper CPU优化:提升<b class='flag-5'>虚拟机</b>性能

    hyper-v 备份,hyper-v怎样进行虚拟机的创建

    虚拟机技术打破了传统计算机的限制,为我们带来了全新的计算机模式。今天给大家介绍hyper-v怎样进行虚拟机的创建?    hyper-v怎样进行虚拟机的创建?    使用PowerShell启用,以
    的头像 发表于 02-05 14:54 793次阅读
    hyper-v 备份,hyper-v怎样进行<b class='flag-5'>虚拟机</b>的创建

    hyper v 删除,怎么样删除hyper-v中的虚拟机

    对于任何追求卓越运营的企业而言,批量管理如同精密时钟的核心齿轮,精准地调控着各项业务的有序运转。今天小编要带来怎么样删除hyper-v中的虚拟机。    要删除Hyper-V中的虚拟机,可以按照以下
    的头像 发表于 02-05 13:39 1504次阅读
    hyper v 删除,怎么样删除hyper-v中的<b class='flag-5'>虚拟机</b>?

    hyper 内存,Hyper内存:如何监控与优化hyper-v虚拟机的内存使用

    :如何监控与优化hyper-v虚拟机的内存使用。    在虚拟化环境中,合理监控和优化Hyper-V虚拟机的内存使用对于提升性能和资源利用率至关重要。本文将详细介绍如何监控Hyper-V虚拟机
    的头像 发表于 01-24 14:15 1670次阅读
    hyper 内存,Hyper内存:如何监控与优化hyper-v<b class='flag-5'>虚拟机</b>的内存使用

    hyper内存条,hyper-v 添加虚拟机还需要硬盘吗

    在计算机技术的浩瀚星空中,虚拟机犹如一颗璀璨的明星,散发着独特的光芒。今天给大家介绍hyper-v添加虚拟机还需要硬盘吗?    hyper-v添加虚拟机还需要硬盘吗?    Hyper-V是
    的头像 发表于 01-24 14:01 695次阅读
    hyper内存条,hyper-v 添加<b class='flag-5'>虚拟机</b>还需要硬盘吗

    vSAN数据恢复—异常断电导致虚拟机无法启动的vSAN数据恢复案例

    异常断电导致vSAN存储上层虚拟机无法启动。
    的头像 发表于 01-08 13:18 692次阅读
    vSAN数据恢复—异常断电导致<b class='flag-5'>虚拟机</b>无法启动的vSAN数据恢复案例

    Ubuntu系统的虚拟机安装步骤 如何在Ubuntu系统上编译软件

    Ubuntu系统上安装虚拟机的步骤 在Ubuntu系统上安装虚拟机是一个相对简单的过程,通常可以通过安装VirtualBox或KVM等虚拟化软件来实现。以下是使用VirtualBox在Ubuntu
    的头像 发表于 12-12 14:36 1857次阅读

    Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

    大家知道Windows系统里面内置了Hyper-V管理器,用来创建和管理本地虚拟机环境。今天我创建了两台虚拟机,一台是CentOS7.9(Linux),另一台是Windows 11,然后发现
    的头像 发表于 12-09 10:24 5566次阅读
    Hyper-V创建<b class='flag-5'>虚拟机</b>配置IP等网络配置原理(Linux、Windows为例)

    如何在虚拟机上安装deepin系统

    如果你想在 Windows、macOS 或 Linux 发行版上体验 deepin 系统,但又不想冒险破坏现在的电脑系统环境,通过虚拟机来安装则是一个理想的选择。
    的头像 发表于 12-05 14:43 1737次阅读
    如何在<b class='flag-5'>虚拟机</b>上安装deepin系统