黑马程序员技术交流社区

标题: Java虚拟机你必须要知道的几件事 [打印本页]

作者: 庭院深深深几许    时间: 2019-4-28 16:12
标题: Java虚拟机你必须要知道的几件事
  在接受Java虚拟机给我带来便利的同时,我们也要思考一下这些技术是怎么完成的,了解最深层的原理。只有熟悉JVM,你才能在遇到OutOfMemory等异常时,不会束手无策,不会一脸懵逼地上网找解决办法,最后就算改了几个启动参数解决了问题,也还是云里雾里。
  今天带大家深入理解JVM,看看这些技术是如何实现的。再看答案之前,如果你能先做出自答,再去对比答案,这样提升会比较快哦。
  一、Java字节码是如何在虚拟机里运行的?
  猿未来将以HotSpot虚拟机拿来说一说,从两个角度来解析。
  1、虚拟机视角:
  将class文件加载到Java虚拟机中之后才能执行Java代码。加载后的Java类会被存放于方法区中。实际运行时,虚拟机会执行方法区内的代码。
  其实段式内存管理中的代码段和它类似。同样Java虚拟机也在内存中划分出堆和栈来存储运行时数据。不同的是,Java虚拟机会将栈细分为面向Java方法的Java方法栈,面向用C++写的native方法的本地方法栈,以及存放各个线程执行位置的PC寄存器。


  在运行过程中,每当调用进入一个Java方法,Java虚拟机会在当前线程的Java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且Java虚拟机不要求栈帧在内存空间里连续分布。
  当退出当前执行的方法时,不管是正常返回还是异常返回,Java虚拟机均会弹出当前线程的当前栈帧,并将之舍弃。
  2、硬件视角:
  Java字节码无法直接执行。因此,Java虚拟机需要将字节码翻译成机器码。
  在HotSpot里面,上述翻译过程有两种形式:第一种是解释执行,相当于同声传译,即每解析一条字节码,便翻译成机器码并执行;第二种是即时编译(Just-In-Timecompilation,JIT),则相当于线下翻译,即将整个方法中所包含的字节码统一翻译成机器码后在执行。


  前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。HotSpot默认采用混合模式,综合了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。
  二、Java虚拟机是如何加载Java类的?
  Java虚拟机加载Java类的过程可分为加载、链接以及初始化三大步骤。
  加载是指查找字节流,并且据此创建类的过程。加载需要借助类加载器,在Java虚拟机中,类加载器使用了双亲委派模型,即接收到加载请求时,会先将请求转发给父类加载器。

  链接,是指将创建成的类合并至Java虚拟机中,使之能够执行的过程。链接还分验证、准备和解析三个阶段,分别完成“验证被加载类是否满足Java虚拟机约束”,“为被加载类静态字段分配内存”,以及“将被加载类中的符号引用解析成为实际引用”的工作。其中,Java虚拟机规范并不要求解析阶段一定要在链接步骤中完成。
  初始化,则是为标记为常量值的字段赋值,以及执行方法的过程。类的初始化仅会被执行一次,这个特性被用来实现单例的延迟初始化。
  三、Java虚拟机是如何进行垃圾回收的?
  Java虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象。它从一系列GCRoots出发,边标记边探索所有被引用的对象。为了防止在标记过程中堆栈的状态发生改变,Java虚拟机采取安全点机制来实现Stop-The-World操作,暂停其他非垃圾回收线程。
  回收垃圾对象的内存共有三种基础算法,分别为:会造成内存碎片的清除算法、性能开销较大的压缩算法、以及堆使用效率较低的复制算法。
  通常来说,Java虚拟机会采用分代回收的思想,将堆划分为新生代和老年代,并且通过在不同代中应用不同的垃圾回收算法。
  传统的做法是将新生代再划分为Eden区和两个大小一致的Survivor区。在只针对新生代的MinorGC中,Eden区和非空Survivor区的存活对象会被复制到空的Survivor区中,当Survivor区中的存活对象复制次数超过一定数值时,它将被晋升至老年代。
  因为MinorGC只针对新生代进行垃圾回收,所以在枚举GCRoots的时候,它需要考虑从老年代到新生代的引用。为了避免扫描整个老年代,Java虚拟机引入了名为卡表的技术,大致地标出可能存在老年代到新生代的引用的内存区域。
  G1垃圾回收器将堆划分为多个等大的区域,每个区域都可以充当Eden区,Survivor区或者老年代区。G1会优先收集垃圾最多的区域,从而最大化垃圾回收的效益。这也是GarbageFirst名字的由来。
  Java中引入的实验性垃圾回收器ZGC,仅在扫描GCRoots时请求Stop-The-World,暂停应用线程。因此,它宣称可将GC暂停时间控制在10ms以下。ZGC暂时没有应用分代回收的思路,将整个堆空间看成一块,其代价是垃圾回收CPU消耗较高。


  四、Java内存模型是什么?
  在现代计算机系统中,代码通常不会按照书写顺序执行。造成这一情况的原因有三个,分别为编译器的重排序,处理器的乱序执行,以及内存系统的重排序。
  以内存系统重排序为例,在多处理器体系架构下,每个处理器都可能缓存了一部分数据。由于时刻保持缓存数据与内存数据同步的性能代价太大,因此部分体系架构可能允许缓存数据与内存数据不同步。这对Java程序的影响便是,两个不同的Java线程在同一时间内看到的同一块内存地址中的值可能不同。
  Java内存模型是针对上述问题而提出的一套规范,用以允许Java程序员更为细致地定义Java程序的内存行为。它通过定义了一系列的happens-before操作,让应用程序开发者能够轻易地表达不同线程的操作之间的内存可见性。
  在遵守Java内存模型的前提下,即时编译器以及底层体系架构能够调整内存访问操作,以达到性能优化的效果。如果开发者没有正确地利用happens-before规则,那么将可能导致数据竞争。
  Java内存模型是通过内存屏障来禁止重排序的。对于即时编译器来说,内存屏障将限制它所能做的重排序优化。对于处理器来说,内存屏障会导致缓存的刷新操作。


传智播客为了将更优质的教育资源惠及更多学子,经过多年的教学探索及战略布局,已向着综合型职业教育集团发展,目前旗下已涵盖传智播客IT教育培训,黑马程序员训练营及博学谷三大子品牌。现直营分校已遍布北京、上海、广州、深圳、武汉、郑州、西安、哈尔滨、长沙、济南等一线城市及省会城市,并将逐步在其他省会城市开始直营分校,让学员可以离高薪更近一点。
  经过10年的专业积淀,传智播客一直专注培养Android、iOS、Java、C/C++、PHP、UI设计、游戏开发、大数据、网络营销、前端与移动开发等泛IT领域的应用工程师,并向社会输送了数10万泛IT行业的高级人才,其中90%以上的学员都在北、上、广、深等一线城市高薪就业。有效的解决了当下互联网行业飞速发展,高端人才供不应求的难题,并且带动了整个IT产业的发展。
  传智播客精益求精的教学品质,也赢得了学员口口相传,这也使得传智播客稳居国内IT培训的领先地位。
  java培训
  传智播客的java培训课程已经有十三年的历史。教育质量始终领先同行业。
  传智Java培训拥有6大课程优势:(http://www.itcast.cn/javaee/
  ①独有的一站式IT职业教育体系,让学员通过6个月的线下学习实现高起点就业, 12个月的线上在职进阶课实现升职加薪,大幅提升学员的职场晋升速度。
  ②60+套技术解决方案,覆盖职场常见开发问题,让学员就业后快速上手开发难题,轻松成为核心员工。
  ③超大项目库,覆盖7大就业主流热门行业,让学员边学习边积累项目开发经验。
  ④超千人投入的3大课程研发库,每年耗资千万打造领先行业的优质课程。
  ⑤传智&华为课程共建,持续为课程输出前沿技术。
  ⑥120+超强师资团队,多为总监、架构师出身,除了专业技能,还为你规划适合你的职业发展路线。
  python培训
  传智播客的python培训班拥有数位总监级讲师,优质的python培训课程以及良好的班级分为使传智播客成为python培训口碑最好的机构。
  Python5.0课程重磅升级,再树行业新标杆(http://www.itcast.cn/python/
  传智根据最新的技术发展方向和企业用人需求, 对Python课程进行了全面升级——Web开发课程占比达40%,包含了热点技术方案、门户及管理信息系统等;人工智能课程占比达30%,包含机器学习常见算法、AI实例演练等;独创“黑马头条”大型一站式项目,集齐六大前沿技术,项目实训超40天;就业强化课程为学员准备了数据分析、自动化测试等六大就业强化课程方向,助学员轻松实现高薪就业。
  大数据培训
  大数据是这几年来互联网的重点发展方向,大数据同样是传智播客的热门课程之一。作为大数据培训口碑好机构,传智播客始终以优越的授课质量领先行业。
  大数据课程紧跟行业最新动态带你走向大数据前沿(http://www.itcast.cn/javayun/
  多多年来,大数据教研团队一直紧跟大数据技术市场发展的趋势,确保市场上流行的新技术能不断更新到所学的培训课程中来。本次课程涵盖大数据体系中核心技术,包括Hadoop、Storm、Spark、Hbase、Python、分布式、机器学习等;知识紧密结合企业的热门需求,授课进度更加科学合理,精心打磨的课程体系,为提升核心竞争力保驾护航!
  php培训
  传智播客php培训拥有者业界超强的php培训课程体系,是业内PHP全栈工程师培训班中的佼佼者,为广大编程爱好者提供PHP+H5全栈工程师培训
  课程重磅升级专注培养PHP+H5全栈工程师(http://www.itcast.cn/php/
  传智播客PHP+H5全栈工程师课程源自于长期市场调研,学员反馈等渠道, 汇总出实用的PHP+H5全栈工程师及其周边技术,学员学习本课程之后, 可以快速融入企业开发环境中。课程分为Web前端、前端进阶、核心编程、移动开发、 性能优化等阶段,涵盖HTML5、CSS3、PHP7、Mysql数据库、Mysqli扩展、Https协议、 Smarty、SVN、Ajax、jQuery、Node.js、Git、Redis等核心技术。 同时针对于每项核心技术,做使用及原理上的讲解,使学员知其然并知其所以然,达到掌握原理后,做任何扩展都会游刃有余。
  linux培训
  传智播客linux培训班,汇聚优秀专业的运维大牛,严谨的教学态度以及专业的教学水平,让传智播客成为优质的linux运维培训机构。
  独创场景式教学模式,更贴近真实企业开发场景(http://www.itcast.cn/linux/
  场景式教学模式如同在课堂真实还原企业开发场景,由讲师带领学员完整实操从分析需求、搭配工具,到解决开发问题等各个开发环节,缩短学员就业后与新团队的磨合期,让学员能够快速融入团队,进入高效的工作状态。同时,传智播客强大的课程研发人才库会第一时间分析企业用人需求,并实时更新课程内容,让学员学习到更贴合一线企业需求的新热技术。
  go语言培训
  传智播客GO语言培训班聘请了业内go语言大牛讲师,全面的go语言培训课程,以及严谨的教学态度,为众多go语言学子实现高薪梦想。传智播客GO语言+区块链培训班。
  始终如一的优质课程,全面覆盖企业需要的高薪技术(http://www.itcast.cn/go/
  传智播客课程研发人才库会根据大数据爬虫系统分析技术发展趋势和企业用人需求,并实时更新课程内容。正是因为这种强大的研发投入,传智Go语言课程才能始终如一的优秀。 传智Go语言课程分为开发实战、Golang高级编程、Golang网络与服务器开发、容器化编程、基于分布式的Golang微服务开发、区块链公链开发、区块链框架编程等十个阶段,全面覆盖新热技术,让学员高薪就业无压力。
  产品经理培训
  传智播客产品经理培训班是专业的产品经理孵化基地,有着经验丰厚的产品经理大牛讲师,好口碑产品经理培训课程来自传智播客。
  培养高薪必备能力助你成为企业疯抢的产品精英(http://www.itcast.cn/pm/
  产品经理课程分为8个阶段:1.产品基础,通过学习产品经理工作流程、流程图、结构图、墨刀的学习,培养产品经理工作思维;2.必备技能,掌握需求分析、竞品分析、用户角色、用户画像等;3.产品前台,通过学习京东、网易严选等大型电商平台掌握四流合一思想;4.产品后台,掌握后台产品模型基础、了解电商后台基础业务等;5.产品运营,掌握产品的应用市场上架、线上线下推广、APP换量、多渠道提升产品用户量;6.产品思维,能够为真正的用户设计正确的产品;7.项目实战;8.行业拓展,涉及在线教育、金融、区块链、大数据、微信小程序、人工智能等。
  影视制作培训
  传智播客影视制作培训班是由专业的影视制作行业老师带队授课,专业的授课方式以及严谨的教学态度为社会输送一大批影视制作尖端人才,传智播客影视制作培训班。
  匠心课程体系,培养综合性多维人才(http://www.itcast.cn/movies/
  影视制作的就业方向从剪辑到编导,从动画到特效,就业选择多种多样。 传智播客的影视制作课程涵盖影视编导项目特训、影视合成与特效包装、C4D三维软件实训、影视包装设计等多个方向,几乎涵盖目前影视主流的就业方向,让学员就业时多一重技能傍身,增加高薪就业砝码。
  ui设计培训
  传智播客UI设计培训一直本着学为人师,行为世范德行操守要求着自己,并成为UI培训行业中前行者,为广大UI设计好者提供UI培训,UI设计培训班,UI设计师培训,设计培训,网页设计培训,平面设计培训,UI界面设计,APP UI设计培训服务。(http://www.itcast.cn/ui/
  课程内容系统全面 打造会代码的全能设计师
  目前,设计师和开发者目前正处于互联网的两端,如果能互相学习对方的技术,会使 双方协作效率大大提升。基于此,传智播客UI设计学院研发了设计加前端代码的课程体系。内容 包括平面设计、电商设计、网页设计、UI设计、html+css、JS、JQ、html5+css3、响应式布局、 Flash等课程内容,根据现实工作的需求,由浅入深合理安排,从工具软件的使用开始, 到初级案例分析练习,再经历项目实战,培养合格的会写代码的全能设计师人才
  新媒体运营培训
  传智播客新媒体+短视频培训,课程紧跟时代潮流,就业率屡创新高,新媒体+短视频培训的佼佼者,口碑推荐率70%,真正用情怀做教育的新媒体运营培训机构。
  新媒体+短视频运营培训课程超50%为项目实操
      软件测试培训
      大型项目全新升级
    2大业务方向+4大高薪技能全新升级的大型项目贯穿学习过程,覆盖2大主流业务方向:PC端测试、移动端测试;覆盖4大高薪技能:功能测试、性能测试、接口自动化、UI自动化。同时,软件测试新增4天项目课时:PC端项目新增2天课时;移动端项目新增2天课时。
 坚持传统模块化授课改革,采用实训、作业、练习相结合,授课环境模拟企业真实工作场景。课程体系包括微博/微信/自媒体平台运营、短视频运营、微信小程序运营、产品运营、营销策划、媒介推广六大阶段,涉及200多个行业流行案例分析教学。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2