Java虚拟机体系结构深入研究总结

  工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的“伎俩”。

  要对Java程序进行内存优化和性能调优,不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书《深入Java虚拟机 (第二版)》(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述)。当然了,了解Java虚拟机的好处并不仅限于上述两点好处。从更深一点的技术层 面上看,了解Java虚拟机的规范和实现,将更加有助于我们编写高效、稳定的Java代码。比如,假如了解Java虚拟机的内存模型,了解虚拟机的内存回 收机制,那么我们就不会过分依赖它,而会在需要的时候显式的”释放内存”(Java代码不能显式释放内存,但是可以通过释放对象引用告知垃圾回收器回收该 对象需要被回收),以降低不必要的内存消耗;假如我们了解Java栈的工作原理,那么我们就可以通过减少递归层数,减少循环次数来降低堆栈溢出的风险。可 能对于应用开发人员来说,可能不会直接去涉及这些Java虚拟机底层实现的工作,但是了解这些背景知识,或多或少,都会对我们写的程序产生潜移默化的好的 影响。

  本篇文章,将简明扼要的说明Java虚拟机的体系结构和内存模型,如有用词不妥或解释不准确之处,请不吝指正,深感荣幸!

  通类装载子系统通过类的全限定名(包名和类名,网络装载还包括 URL)将 Class 装载进运行时数据区。对于每一个被装载的类型,Java虚拟机都会创建一个g.Class类的实例来代表该类型,该实例被放在内存中的堆 区,而装载的类型信息则位于方法区,这一点和所有其他对象都是一样的。

  类装载子系统在装载一个类型前,除了要定位和导入对应的二进制class文件外,还要验证导入类的正确性,为类变量分配并初始化内存,以及解析符号引用为直接引用,这些动作严格按照以下顺序进行:

  方法信息(包括方法名、返回类型、参数的数量和类型、方法修饰符,如果方法不是抽象和本地的,还将保存方法的字节码、操作数栈和该方法栈帧中的局部变量区的大小和异常表)

  常量以外的所有类变量(其实就是类的静态变量,因为静态变量是所有实例共享的,且与类型直接相关,所以他们是类一级的变量,作为类的成员被保存在方法区)

  Java程序在运行时创建的所有类实例或数组都放在同一个堆中,而每一个Java虚拟机也是有一个对空间,所有线程共享一个堆(这就是一个多线程的Java程序会产生对象访问的同步问题的原因了)。

  由于每一种Java虚拟机都有对虚拟机规范的不同实现,所以我们可能不知道每一种Java虚拟机在堆中是以何种形式表示对象实例的,不过我们可以通过下面这可能的实现来一窥端倪:

  对于运行中的Java程序而言,每一个线程都有自己的PC(程序计数器)寄存器,它是在该线程启动时创建的,大小为一个字长,用来保存需要被执行的下一行代码的位置。

  每一个线程都有一个Java栈,以栈帧为单位保存线程的运行状态。虚拟机对Java栈的操作有两种:压栈和出栈,二者都已帧为单位。栈帧保存了传入参数、局部变量、中间运算结果等数据,在方法完成时被弹出,然后释放。

  Java虚拟机的核心,控制装入 Java 字节码并解析;对于运行中的Java程序而言,每一个线程都是一个独立的虚拟机执行引擎的实例,从线程生命周期的开始到结束,他要么在执行字节码,要么在执行本地方法。

  注:文中所有提到”Java虚拟机”的地方都是指”JavaEE和JavaSE平台的Java虚拟机规范”。

  每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

  对于苹果来说,今天是个大日子,因为自家最新的iPhone X正式开卖,而有些用户凭借时区…

  11月2日,OPPO在京举办新品发布会,正式发布旗下首款全面屏机型OPOO R11s。我们已经抢…

  Razer Phone是一款不折不扣的游戏手机,配置、设计专为游戏优化,最大的特点是搭载骁…

  监管文件显示,科斯罗萨西周四通知纽约时报公司董事会,他将因为出任Uber的新职位而卸…

  北京时间10月30日早间消息,Uber上周五宣布任命一名新的首席法务官,帮助该公司应对诸…

  一名美国法官已责令进行一项新的审判,目的是判定三星应因其抄袭苹果公司iPhone外观设…

  今天,网易《终结者2:审判日》官方宣布,将于2017年11月3日早上11点开启安卓不删档首…

  今晨,微软面向Windows 10用户发布两个正式版累积更新。其中,创意者更新Version 1703…

  昨日晚间,迅雷团队宣布9.1.43版本发布,详细版本号为9.1.43.938,该版本继续进行体验…

  炉石传说本周乱斗迷你战争,这是这个乱斗第3次出现了,需要自己组卡,本周的套路很多……

  阴阳师奴良陆生妖气副本从哪进?阴阳师奴良陆生妖气副本是本次联动活动的副本哦入口哦!……

  天天酷跑地狱战马已经上线了,那么天天酷跑地狱战马碎片怎么获得,下面就来看看把。……

  《绝地求生大逃杀》中的四排是需要有一些战术策略的,这样团队合作才能发挥出较好的效……

User Review
0 (0 votes)

猜你喜欢

本站最新优惠

Namesilo优惠:新用户省 $1 域名注册-优惠码:45D%UYTcxYuCloZ 国外最便宜域名!点击了解更多

特别优惠:免费赠送 $100 Vultr主机-限时优惠!英文站必备海外服务器!点击了解更多

VPS优惠:搬瓦工优惠码:BWH3OGRI2BMW 最高省5.83%打开外面世界的一款主机点击了解更多

加入电报群

【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2017/814.html

扫码加入电报群,让你获得国外网赚一手信息。

文章标题:Java虚拟机体系结构深入研究总结

(0)
上一篇 2017-11-05 19:05
下一篇 2017-11-05 19:05

热门推荐

发表回复

登录后才能评论
国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM598
$5.98/年
直达官网