首页 > 编程语言 > 详细

1.1 Java程序是如何执行的?

时间:2019-10-09 22:53:43      阅读:98      评论:0      收藏:0      [点我收藏+]

本节从整体来看一下Java中的精髓.

Java介绍

Java和JDK的关系

JDK(Java Development Kit) Java开发工具包,它包括:编译器,Java运行环境(JRE, Java Runtime Environment), JVM(Java虚拟机),监控和诊断工具等,而Java则表示一种开发语言.

Java程序是怎么执行的?

  1. 先把Java代码编译成字节码,也就是把 .java类型的文件编译成 .class类型的文件.这个过程的大致执行流程: Java源代码 -> 词法分析器 -> 语法分析器 -> 语义分析器 -> 字节码生成器  ->最终生成字节码,其中任何一个节点执行失败就会造成编译失败;
  2. 把class文件放置到Java虚拟机,这个虚拟机通常指的是Oracle官方自带的Hotspot JVM;
  3. Java虚拟机使用类加载器(Class Loader)装载class文件;
  4. 类加载完成之后,会进行字节码校验,字节码校验通过JVM解释器会把字节码翻译成机器码交由操作系统执行.但不是所有代码都是解释执行的,JVM对此做了优化, 比如, 以Hotspot虚拟机来说, 它本身提供了JIT (Just In Time)也就是我们通常所说的动态编译器,它能够在运行时将热点代码编译成机器码,这个时候字节码就变成了编译执行.

Java程序执行流程图如下:

技术分享图片

Java虚拟机是如何判定热点代码的?

Java虚拟机判定热点代码的方式有两种:

  • 基于采样的热点判定

主要是虚拟机会周期性的检查各个线程的栈顶,若某个或某些方法经常出现在栈顶,那这个方法就是"热点方法".这种判定方式的优点是实现简单;缺点是很难精确一个方法的热度,容易受到线程阻塞或外界因素的影响.

  • 基于计数器的热点判定

主要就是虚拟机给每一个方法甚至代码块建立了一个计数器,统计方法的执行次数,超过了一定的阈值则标记此方法为热点方法.

Hotspot虚拟机使用的基于计数器的热点探测方法.它使用了两类计数器:方法调用计数器和回边计数器,当达到一定阈值时就会触发JIT编译.

方法调用计数器: 在client模式下的阈值是1500次,Server 是10000次,可以通过虚拟机参数: -XX: CompileThreshold = N 对其进行设置.但是JVM还存在热度衰减, 时间段内调用方法的次数较少,计数器就减小.

回边计数器: 主要统计的是方法中循环体代码执行的次数.


由上面的知识点我们可以看出,要想做到对Java了如指掌,必须要好好学习Java虚拟机,那除了Java虚拟机外,还有哪些知识是我们Java工程师必须掌握的知识呢?

 

1.1 Java程序是如何执行的?

原文:https://www.cnblogs.com/Night-Watch/p/11644740.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!