我的编程空间,编程开发者的网络收藏夹
学习永远不晚

常见JVM机制都有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

常见JVM机制都有哪些

本篇文章为大家展示了常见JVM机制都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

JVM机制

一、Java源码编译机制:

1。分析和输入到符号表(ParserAndEnter):

词法分析com.sun.tools.javac.parser.Scanner:将代码字符串转变为token序列。

语法分析com.sun.tools.javac.parser.Parser:Token序列生成抽象语法树。

输入到符号表com.sun.tools.javac.comp.Enter:类中出现的符号输入类自身的符号表中等。

2。注释处理(AnnotationProcessing)

用于处理用户自定义的annotation,处理后再次进入ParserAndEnter步骤。

3。语法分析和生成class文件(AnalyseandGenerate)

基于抽象语法树进行一序列语义分析,再完成分析后,开始生成class文件com.sun.tools.javac.jvm.Gen。

二、类加载机制(类加载器子系统的工作职责与工作流程):

1。装载(Load):查找并装载二进制字节码,采用两个元素来标识一个被加载的类:类的全限定名+ClassLoader实例ID。

2。链接(Link):校验(Verify)--格式校验确保被导入类的正确性-->准备(Prepared)--为类变量分配内存空间并初始化默认值-->解析(Resolve)--把导入类的符号引用转换为直接引用。

3。初始化(Initialize):执行类中的静态初始化代码、构造器代码及静态属性的初始化。

ClassLoader双亲委派模型:

BootstrapClassLoader--$JAVA_HOME/jre/lib/rt.jar(曾祖父)<--

ExtensionClassLoader--$JAVA_HOME/jre/lib/ext/*.jar(祖父)<--

SystemClassLoader--$CLASSPATH(父亲)<--

User-DefinedClassLoader

三、JVM学习笔记之类执行机制:

SunJDK基于栈的体系结构来执行字节码,代码紧凑,体积小。调用方法invokestatic、invokespecial、invokevirtual、invokeinterface。

1。字节码解释执行

指令解释执行:对于方法的指令解释执行,执行方式为经典冯*诺依曼体系的FDX循环方式,有switching-threading、token-threading、direct-threading、subroutine-threading、inline-threading。

SunJDK主要的优化:

栈顶缓存(top-of-stackcaching):即将本来位于操作栈顶的值直接缓存到寄存器上,这对于大部分只需要一个值的操作而言,无须将数据放入操作数栈,可直接在寄存器计算,然后返回操作数栈。

部分栈帧共享:当方法调用时,后一个方法可将前一方法的操作数作为当前方法的局部变量,从而节省数据copy带来的消耗。下面再来看一下JVM学习笔记之类执行机制的第二部分内容字节码编译执行。

2。字节码编译执行

解释执行的效率较低,为提升代码执行性能,SunJDK提供将字节码编译为机器码的支持,编译在运行时进行,通常称为JIT编译器。SunJDK在执行过程中,对执行频率不频繁的代码采用解释执行,执行频率高的代码采用编译执行。

SunJDK主要的优化:

ClientCompiler(C1):

方法内联:-XX:MaxInlineSize=字节数进行控制。

去虚拟化:进行类的层次的分析,如发现类中的方法只提供一个实现类,那么可以对调用此方法的代码进行方法内联。

多余消除:根据运行状况进行代码折叠或消除。

ServerCompiler(C2):

标量替换:用标量替换聚合量,如:用基本类型替换对象。

栈上分配(TLAB):对于未逃逸对象可以直接在栈上分配,而不是JVM堆上。

同步消除:如果发现同步对象未逃逸,可以去掉同步。

SunJDK之所以未在启动时即编译成机器码,有几方面原因:

根据运行状况来进行动态编译,为C2收集运行数据的越长的时间,编译出来的代码会比静态编译更优越。

解释执行比编译执行更节省内存。

启动时解释执行的启动速度比编译再启动执行更快。

(小记:当java-server出现Error:no`server'JVMat`XXX\bin\server\jvm.dll'错误时,解决方法可以复制jdk下jre\bin\server目录到jre7\bin目录下;或windows下可以通过修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JavaRuntimeEnvironment;UNIX下更改/usr/java的链接)

3。反射执行

基于反射可动态调用某对象实例中对应的方法、访问查看对象的数据等。最直接的方法是动态生成字节码:Class.forName(Class'sName)。

getMethod相对比较耗性能(装载Class对象、各种(权限等)校验Class、执行构造对象的netInstance、所有方法的扫描及Method对象的复制、......),反射执行获取的方法与标准的方法调用没有任何区别(method.invoke仅比直接调用低一点),所以可采用缓存getMethod返回的Method对象来提升性能。

上述内容就是常见JVM机制都有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

常见JVM机制都有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

常见JVM机制都有哪些

本篇文章为大家展示了常见JVM机制都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JVM机制一、Java源码编译机制:1。分析和输入到符号表(ParserAndEnter):词法分析com.s
2023-06-17

JVM常见垃圾收集器有哪些

这篇文章主要介绍了JVM常见垃圾收集器有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JVM常见垃圾收集器有哪些文章都会有所收获,下面我们一起来看看吧。垃圾收集器类型垃圾收集器 是 垃圾收集算法 的具体实现
2023-07-02

常见的反爬虫机制有哪些

这篇文章主要讲解了“常见的反爬虫机制有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常见的反爬虫机制有哪些”吧!对爬虫用户而言,网站的反爬行机制可以说是其头号敌人。反爬机制是一种防止爬虫
2023-06-20

JVM调优概念都有哪些

今天给大家介绍一下JVM调优概念都有哪些。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本
2023-06-17

PHP中有哪些常见的错误机制

今天就跟大家聊聊有关PHP中有哪些常见的错误机制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。PHP的错误级别首先需要了解php有哪些错误。截至到php5.5,一共有16个错误级别注
2023-06-17

JVM中常见的垃圾收集器有哪些

这篇文章主要介绍了JVM中常见的垃圾收集器有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java
2023-06-02

成都主机租用常见的注意事项有哪些

成都主机租用常见的注意事项有:1、机房的选择,选择好的机房或数据中心才能保证服务器的安全;2、服务器的配置,根据自身网站需求选择合适的配置;3、服务器的扩展性,选择能及时调整配置来适应用户网站发展需求的成都主机;4、性价比,选择性价比高的成
2023-02-08

常见的Linux操作系统都有哪些

这期内容当中小编将会给大家带来有关常见的Linux操作系统都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux操作系统诞生于1991 年的10 月5 日(。Linux存在着许多不同的Linux
2023-06-28

jvm回收机制的算法有哪些

JVM的垃圾回收机制有以下几种算法:1. 标记-清除算法(Mark and Sweep):首先从根节点开始标记,然后遍历整个对象图,标记所有可以访问到的对象,最后清除所有未标记的对象。2. 复制算法(Copying):将堆分为两个区域,每次
2023-08-24

常见的Java基础语法知识都有哪些

本篇内容主要讲解“常见的Java基础语法知识都有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常见的Java基础语法知识都有哪些”吧!  对象:对象是类的一个实例,有状态和行为。  类:类是
2023-06-02

常见的Linux虚拟机有哪些

本篇文章为大家展示了常见的Linux虚拟机有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Linux虚拟机有:1、VMware Workstation,是一款功能强大的桌面虚拟计算机软件;2、V
2023-06-21

Linux常见死机原因有哪些

本篇内容主要讲解“Linux常见死机原因有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux常见死机原因有哪些”吧!在排除了硬件故障/firmware版本/BIOS等等问题之外, Li
2023-06-10

云主机常见故障有哪些

云主机常见故障包括但不限于以下几种:1.网络故障:包括网络连接不稳定、断连、延迟高等问题。2.硬件故障:包括主机宕机、硬盘故障、内存故障等问题。3.操作系统故障:包括系统崩溃、系统卡顿、服务无法启动等问题。4.安全问题:包括服务器遭受DDo
2023-09-16

Java初学者的30个常见问题都有哪些

Java初学者的30个常见问题都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区
2023-06-17

JVM架构体系与GC命令都有哪些

这篇文章将为大家详细讲解有关JVM架构体系与GC命令都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JVM运行时数据区OverviewJava虚拟机Java virtual machi
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录