深入理解JVM读书笔记——自适应代码生成

Packtpub.Oracle.JRockit.The.Definitive.Guide.Jun.2010.rar 立即下载

笔记书籍:JRockit权威指南深入理解JVM

作者:马库斯.希尔特 马库斯.拉杰格伦 著
翻译:曹旭东

2.1 JAVA虚拟机

JVM将字节码转化为匹配当前硬件架构的本地代码供CPU执行。具体以两种实现方式:
1 JVM规范将JVM描述为一个状态机器,因此实际上并不需要真的将字节码转化为本地代码执行 。JVM可以完整模拟Java程序的 执行状态。例如可以将每条字节码模拟为一个JVM状态函数。这种方式称为字节码解释执行(bytecode interpretation),在这种情况下,唯一直接执行的本地代码(这里暂不考虑JNI)就是JVM本身。
2 JVM将字节码编译为匹配目标平台的本地代码,然后再调用执行这些本地代码。一般情况下 ,将字节码编译为本地代码这一步发生在某个方法第一次被调用的时候。这个过程就是众所周知的即时编译(Just-In-Time compilation,也叫JIT编译)

2.1.1 基于栈的虚拟机

JVM是一种基于栈的虚拟机,绝大部分字节码操作都是处理操作数栈的内容,从栈中弹出内容,计算,再将结果放回栈中。
除了操作数栈 之外 ,按照字节码的格式,还有多达65536个寄存器可以使用。寄存器也称为局部变量(local variable)
在字节码格式中,操作指令都被编译在 一个字节中 ,也就是说,Java最多支持256种操作码(opcode),每种操作都对应着一个唯一值和类似于汇编指令 的助记符(mnemonic)。

2.1.2 字节码格式

1 操作与操作数
每种操作都使用一个字节表示,后跟一个可选的、长度可变的操作数。
一般情况下,带有操作数的字节码指令的长度不会超过3字节。
返回值为boolean类型时是使用常量整数来表示的 。
2 常量池
对于字节码程序来说,常用的操作数会内嵌于字节码指令中。
较大块的数据,例如常量字符串,比较大的数字,是 存储在.class文件开始部分的常量池中。当使用这类数据作为操作数时,使用的是常量池中数据的索引位置,而不是实际数据本身。
此外,Java程序中的方法、属性和类的元数据等也作为.class文件的组成部分,存储在常量池中。

2.2代码生成策略

jvm执行字节码指令时有几种不同的方式
在这里插入图片描述

2.3自适应代码生成

由以上知识点总结结论:
1 代码生成是在运行过程中进行,而不是预先完成。
2 代码生成器应该区分热方法 和冷方法。不应将过多的资源和效率浪费在冷方法上
3 自适应运行时的JIT编译器需要记录一些额外的信息来确保在必要时刻能够重新生成本地代码。
代码执行效率公式:
总体执行时间=代码生成时间+代码执行时间

2.3.1判断热方法

在这里插入图片描述

2.3.2优化动态程序

在汇编语言,call指令完成方法调用。
在面向对象中,虚拟方法分派通常被编译为对分派表中地址的间接调用(indirect call,即需要从内存中读取真正的调用地址)
这句话的意思是每个类都有给一个分派表,其中包含了其虚拟调用的接收者信息,根据不同 的类继承结构,分派虚拟 调用时可能会有多个接收者。
静态方法和确只只有一个接收者的虚拟方法可以被编译为对固定调用地址的直接调用。
优化策略——“赌”
若是“赌”,则需要以下几点典型假设:
1 虚拟方法不会被覆盖。由于某个虚拟方法只存在一种实现,则其可以优化为直接调用
2 浮点数的值永远不会是NaN。大部分情况下,可以使用硬件指令来替换对本地浮点数函数库的调用。
3 某些try语句块不会抛异常,可以将catch语句中的代码 作为冷方法对待。
4 对于大多数三角函数,硬件指令fsin都能达到精度,若达不到则调用本地浮点函数库。
5 锁竞争初期不会太激烈则使用自旋锁来替代。
6 锁可能会周期性地被同一个线程获取和释放,所以,可以将对锁的重复获取操作和重复释放操作直接省略。

2.4深入JIT编译器

本节介绍JIT编译器如何将字节码编译为高效的本地代码。
在这里插入图片描述
博主提示:在总结JIT如何高效编译为本地代码中,作者并未对内容进行详细讲述。后续笔记会细细剖析。

2.5代码流水线

在这里插入图片描述

Oracle JRockit权威指南2010 JRockit 高性能JVM,权威指南。 想获取高性能Java运行环境,此书必看。想研究JVM此书也异常经典。 立即下载

相关推荐

Oracle JRockit The Definitive Guide

oracle jrockit 权威指南,是深入理解jrockit的必备手册

阿里架构师的床头文案:深入理解Java虚拟机的权威指南PDF

但应该记住的是,对JVM层面的调优也只有这么多了,对应.用程序本身的业务逻辑和具体实现做调优其实是更简单、更有效的。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。着重介绍了JVM和自适应运行时的作用及工作原理,还指出了自适应运行时以及JRockit的优势和劣势,以便在适当的时候解释什么是良好的Java编码实践。

m0_63437643的博客 989

jrockit调优指南

jrockit调优。jRockit支持四种垃圾收集器:分代复制收集器、单空间并发收集器、分代并发收集器和并行收集器。

深入理解JVM读书笔记——自适应内存管理(一)

笔记书籍:JRockit权威指南深入理解JVM 作者:马库斯.希尔特 马库斯.拉杰格伦 著 翻译:曹旭东 3.1自动内存管理 自动内存管理(automatic memory management)是指无须使用老式的内存释放操作,例如free操作符 ,就可以自动回收废弃对象占用的内存的垃圾回收技术。 大部分自动内存管理系统使用的都是引用跟踪技术,即执行垃圾回收时沿着对象的引用关系遍历堆中对象,以确定...

JavaKobeBryant的技术交流 847

《Oracle WebLogic Server开发权威指南》PDF

《Oracle WebLogic Server开发权威指南》

JRockit(5)

Oracle JRockit Mission Control 4.0.1

JRockit权威指南深入理解JVM

本文整理自:《JRockit权威指南深入理解JVM》作者:Marcus Hirt , Marcus Lagergren出版时间:2018-12-10起步将应用程序迁移到...

勿忘初心 1661

Oracle JRockit_The Definitive Guide

本书介绍jrockit实现,是深入理解jrockit必备工具书

深入理解JVM读书笔记——自适应内存管理(二)

笔记书籍:JRockit权威指南深入理解JVM 作者:马库斯.希尔特 马库斯.拉杰格伦 著 翻译:曹旭东 3.4性能与伸缩 3.4.1线程局部分配 为分配对象而保留的区域被称为线程局部缓冲区(thread local area,TLA),每一个线程都有一个线程局部缓冲区。 正常情况下,在线程内的缓冲区中为对象分配内存要比直接 在需要同步操作的堆上分配内存快得多。 一般情况下,为了更好地利用缓存,达...

JavaKobeBryant的技术交流 740

Zenoh:统一数据平面协议,重塑物联网与边缘计算架构

在分布式系统与物联网领域,数据通信与处理常面临协议割裂的挑战。传统方案如MQTT、Kafka、gRPC等,分别针对发布/订阅、流处理和RPC等不同场景,导致架构复杂、集成成本高。其核心问题在于未能统一处理“运动中数据”(Data in Motion)与“静止中数据”(Data at Rest)。Zenoh协议通过创新的“Key-Value”寻址与“Selector”查询语言,将发布/订阅、存储、查询和计算四种核心操作融合进单一协议,构建了统一的抽象层。这种设计实现了极低的协议开销(仅5字节头部)和地理分布式

weixin_29597551的博客 290

Dify-前端本地运行-单点登录

本文介绍了如何在已部署Dify的系统中实现AI应用跳转及页面定制化改造。通过iframe跳转无法满足甲方需求后,作者对Dify前端源码进行了本地化二次开发,主要步骤包括:1) 按照官方文档搭建本地开发环境;2) 修改.env配置文件连接部署好的后端服务;3) 隐藏侧边栏和头部导航栏;4) 实现单点登录功能,通过URL参数获取用户邮箱自动登录。过程中解决了请求拦截导致的登录校验问题,最终达成仅保留对话框界面并同步用户信息的需求。该方案涉及Next.js框架和React技术的应用,为类似定制化需求提供了参

weixin_43163457的博客 3224

深入理解JVM

《深入理解JVM》读书笔记

Mark Down Here 339

Pointnet++环境配置+复现

深度学习点云经典网络Pointnet++

weixin_58663121的博客 8075

《深入理解Java虚拟机 JVM高级特性与最佳实践 》- 周志明 读书笔记

本书是一本介绍Java虚拟机的经典之作,对于想要深入JVM的同学来说,是必不可少的一本书。读书笔记,对我而言有两部分,一部分是书中内容,一部分是自己的领悟。而我想分享的是读本书起因和过程中的体悟。原谅我的挂羊头卖狗肉。

Oscar Chen 4887

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 490

GEE:面对对象土地利用分类(结合SNIC、GLCM 和机器学习算法)

本文将介绍在Google Earth Engine中结合SNIC、GLCM和机器学习算法的的土地利用/土地覆盖(LULC)分类方法。结果如下图所示,

养乐多的博客 5617

JVM读书笔记与总结之对象的访问定位

JVM读书笔记与总结之对象的访问定位摘自《深入理解Java虚拟机》一书

望月思灵 478

材料仿真软件:LAMMPS_(8).温度和压力控制

在 LAMMPS 中,温度和压力的控制是通过多种恒温器和恒压器实现的。Nose-Hoover 恒温器和恒压器因其准确性和广泛适用性而被经常使用,而 Berendsen 恒温器和恒压器则因其计算效率高而适用于初步仿真或粗粒化模型。温度重标和压力重标方法虽然简单,但在某些情况下可以快速调整系统的温度和压力。通过选择合适的控制方法,可以根据具体的需求和系统特性来设计和运行分子动力学仿真,从而获得准确和可靠的结果。在实际应用中,建议先进行初步的仿真以确定合适的控制参数,然后再进行细致的仿真以验证结果的稳定性。

kkchenjj的博客 1692

【亲测免费】 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记推荐

深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记》是一个开源项目,旨在为Java开发者、系统架构师以及对JVM有深入研究兴趣的读者提供一份详尽的读书笔记。这份笔记基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》一书...

gitblog_06510的博客 475

定位教程7---旋转中心标定之方法二

手算相机相对机器人关系

Quintin 6230

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新。

u012901740的博客 2196

深入理解JVM 读书笔记

xx

onlyForCloud的专栏 496

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

读书笔记——深入理解JVM(JVM自动内存管理)

简介 本系列为《深入理解Java虚拟机—JVM高级特性与最佳实践》一书的阅读笔记。 本书开头介绍了JVM发展的历史,接着介绍了JVM是如何实现自动内存管理的。 本章节主要介绍: JVM的存储结构; JVM的运行机制; GC 的原理。 1. JVM内存结构和内存溢出异常 JVM实质上就在内存中开辟的一块内存空间,这块空间被JVM占用并被划分成若干个分区(逻辑上的),为了高效的管理,这些分区会执行不同的功能,由于JVM有GC机制,所以我们不用太过于纠结内存泄露的问题,然而当出现内存不足等问题时,我们需要分析

yindarui 551

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《深入理解JVM》读书笔记

抽时间重新读了一遍《深入理解JVM》一书。以下为摘录内容。 1 java内存区域 java虚拟机运行时数据区 1.1 程序计数器 是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响。 1.2 java虚拟机栈 描述的是java方法执行的内存模型:每个方法在执行...

weixin_34009794的博客 184

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: Druid数据源配置多个数据库
下一篇: 深入理解JVM读书笔记——自适应内存管理(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值