深入理解 JVM Class文件格式(十)

到此, 所有关于class文件格式的重要内容都已经讲解完了, 不敢说面面俱到, 但是敢说大部分重要的内容都包含在内了。前前后后用了9篇博客来专门讲解class文件结构, 为什么花那么多的时间和精力来介绍class文件呢? 简而言之,因为它很重要。在前面的文章中, 也讲到过为什么对于理解Java体系结构来说, 理解class文件的格式至关重要。 其实这篇短文也不是对class文件格式细节上的总结, 而是我在学习class文件和JVM的过程中的一些感悟和理解。

我们都知道JVM能够识别的只有class格式的文件, 而源文件只是我们人能识别的, 不能被JVM识别。 那我们要在更深的层次上理解Java语言, 理解JVM, 只懂源文件是不够的, 因为虚拟机的很多的行为, 是在class文件中定义的, 而我们要理解JVM的行为, 就必须也学会JVM能理解的“语言”, 那就是class文件格式 。 就像我们想要深入的了解一个外国人, 只站在自己的角度上是不可能了解他的, 只有你学会了他的语言, 才能对他更了解, 因为只有你理解了他说的话, 才能知道他做的事, 进而了解他的行事方式和性格特点。 当然, 也有另外一个方式可以让你了解外国人, 那就是让他学会中国话, 你们用中文交流。 但是在Java的世界里, 这是不可能的, 因为你不可能让JVM识别源文件, 所以, 只能你去学习JVM能理解的语言 ---- class文件。

理解了class文件的格式, 不仅对理解JVM的行为有指导性的意义, 它还能让我们对Java代码有更加清晰深刻的认识, 毕竟class文件是由我们写的java代码“翻译”过来的。 明白了class文件的格式, 你就能知道方法是如何表示的, 字段是如何表示的, 继承是如何表示的 , 方法体是如何表示的, 等等。 所有源文件中的东西, 都会在class文件中有相应的描述形式。 这样会让我们在写代码时做到胸有成竹。 当代码出了问题时, 也能更快的找出原因所在,因为我们可以把源码生成的class文件反编译出来, 看看它内部是如何实现的。 毕竟原理明白了, 源代码只是表象罢了。

此外, class文件不只是可以由Java代码生成。 其他很多基于JVM的语言, 也是生成标准的class文件, 然后被虚拟机执行。 如我最近正在学习的scala语言, 它就是基于虚拟机的。 scalac编译器可以将scala代码编译成class文件。 这样的话, 了解class文件格式, 可以对学习其他基于JVM的语言起到很好的作用, 你会发现, 如果你对class文件和JVM足够了解的话, 学习这些语言会感到非常轻松。 class文件是JVM的一个接口, 不管你源文件中写的是什么代码, 不管是java还是scala, 只要通过一定的方式, 让你写的代码可以转化成格式正确的class文件, 那么JVM就能替你执行。 如果你足够牛, 完全可以自己创建一门语言, 实现一个针对这个语言的编译器, 将之编译成class, 那么虚拟机也能执行, 并且Scala,Groovy等语言的设计者已经在这么干了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《WTM送书活动:向更遥远的星辰大海起航~》

点击上方蓝字关注我们吧是的,没错~这一篇不是大老刘写的 哈哈~啥? 你想知道为啥? 大老刘为了你们不加班,熬夜改BUG,姑娘不乐意了...然后...后面请自行脑补~哎~生活还要继续鸭....那么,接下来由我陪大家唠一段儿~ 单口...各位看官老爷们:注意了!第一件事情呢我们的WTM框…

P4602 [CTSC2018]混合果汁(主席树)

P4602 [CTSC2018]混合果汁 共有nnn种果汁,第iii种果汁的美味度为did_idi​,每升价格为pip_ipi​,在一瓶混合果汁中,最多只能添加lil_ili​升。 有mmm个询问,每次询问给出两个数g,Lg, Lg,L,我们要找出价格…

Java中的对象一定在堆上分配吗?

首先,为解释这个问题,需要的基本知识如下(如果对以下概念不太熟悉, 可以先了解下): 1.JVM内存结构,传送门 2.即时编译(JIT),传送门 3. 逃逸分析,…

最全的 netcore 3.0 升级实战方案

1、哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程《系列一、NetCore 视频教程(Blog.Core)》也已经录制八期了,还在每周末同步更新中,…

H - Hello Ms. Ze(树状数组套主席树,线段树上二分)

H - Hello Ms. Ze 给定nnn种不同的材料,第iii种材料有aia_iai​个,有mmm个操作,操作分为两类: 把第xxx种材料修改为yyy个,只用[l,r][l, r][l,r]区间的材料制作衣服,每件衣服要用kkk个不同的材料&#xff…

JVM——逃逸分析

首先,为解释这个问题,需要的基本知识如下(如果对以下概念不太熟悉, 可以先Google下): 1.JVM内存结构,传送门 2.即时编译(JIT),传送门 逃逸分析 在编译期间…

ASP.NET Core SignalR:集线器Hub

一、什么是集线器hubs通过SignalR的集线器hubs中定义的方法,服务器可以调用连接中的客户端定义的方法,而客户端也可以调用服务器端集线器中定义的方法。SignalR负责实现了客户端和服务器之间的实时通信。二、配置SignalR的hubsSignalR通过在Startup.Conf…

P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演 + 伯努利数)

P6271 [湖北省队互测2014]一个人的数论 ∑i1nim[gcd⁡(i,n)1]∑d∣nμ(d)dm∑i1ndim由伯努利数可知∑i0nim1m1∑i0mCm1iBi(n1)m−i1设fi1m1Bm−i1Cm1i,则有∑d∣nμ(d)dm(∑i1m1fi(nd)i(nd)m)∑i1m1fini∑d∣nμ(d)dm−i(nm∑d∣nμ(d))考虑后项∑d∣nμ(d)dm−i,迪…

Java面试题汇总

1、综合素质层面 个人介绍、离职原因、兴趣爱好等 https://mp.weixin.qq.com/s?__bizMzI3NzE0NjcwMg&mid2650121143&idx2&snf4c4f26bc5d2132352f12d28c8cb2264&chksmf36bbe96c41c3780d8086adec7be8737ce3718db9c2a7fa33aa7591f8ae179ed3240286f3886&scen…

微软发布.Net Core 3.0 RC1,最终版本定于9月23日

2019.9.17 微软 宣布推出.NET Core 3.0 Release Candidate 1。就像Preview 9一样,主要专注于为 .NET Core 3.0 发布最终版本 。现在变得非常非常接近。将在9月23日.NET Conf上发布最终版本。.NET Core 3.0是从仅支持Windows传统的 .NET框架向更现代化的开源实现过渡…

JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念&…

ZOJ The Sum of Unitary Totient(min_25 筛)

The Sum of Unitary Totient 积性函数&#xff0c;满足质数点是多项式&#xff0c;直接 min_25 了&#xff0c;由于单次求解&#xff0c;所以使用递归的 min_25 会较快。 #include <bits/stdc.h>using namespace std;const int N 1e5 10;int prime[N], a[N], id1[N],…

迫于误解压力,RMS从自由软件基金会与MIT离职

自由软件基金会官网显示&#xff0c;基金会创始人兼主席、自由软件运动发起人 Richard M. Stallman&#xff08;RMS&#xff09;辞去主席职务并辞去董事会职务。而另一边&#xff0c;stallman.org 邮件列表显示&#xff0c;RMS 已经从麻省理工学院&#xff08;MIT&#xff09;计…

F - Colorful Tree(LCA,树上差分,离线处理)

F - Colorful Tree 给定一棵树&#xff0c;边有边权&#xff0c;且每条边有一个颜色&#xff0c;有mmm次操作&#xff0c; 每次给定x,y,u,vx, y, u, vx,y,u,v&#xff0c;如果把颜色为xxx的边&#xff0c;边权修改为yyy&#xff0c;求u,vu, vu,v两点的距离&#xff0c;考虑 …

让人迷茫的三十岁!从专业技能、行业知识和软实力谈一下!

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区合伙人&#xff01;我今年三十岁&#xff0c;我很迷茫&#xff0c;不知道未来该选择什么发展方向。这是我无意中在社区微信群中看到的一位年轻的开发者说的话&#xff0c;之前他也经常会在技术群…

D. Steps to One(概率DP,莫比乌斯反演)

D. Steps to One 设f[i]f[i]f[i]为gcd⁡\gcdgcd为iii&#xff0c;还需要多少个数&#xff0c;那么有f[i]1∑j1mf[gcd⁡(i,j)]mf[i] 1 \frac{\sum\limits_{j 1} ^{m} f[\gcd(i, j)]}{m}f[i]1mj1∑m​f[gcd(i,j)]​&#xff0c; f[1]0f[1] 0f[1]0&#xff0c;考虑化简∑j1mf…

误用.Net Redis客户端工具CSRedisCore,自己挖坑自己填

前导  上次Redis MQ分布式改造完成之后&#xff0c; 编排的容器稳定运行了一个多月&#xff0c;昨天突然收到ETL端同事通知&#xff0c;没有采集到解析日志了。赶紧进服务器看了一下&#xff0c;用于数据接收的receiver容器挂掉了&#xff0c; 尝试docker container start [c…

Java——类加载机制

** 一、什么是类的加载 ** 类的加载指的是将类的.class文件中的二进制数据读入到内存中&#xff0c;将其放在运行时数据区的方法区内&#xff0c;然后在堆区创建一个java.lang.Class对象&#xff0c;用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class…

.NET中国峰会议题征集

月初做的调查《》&#xff0c;参与人数576人&#xff0c;愿意参与分享.NET Core经验的142人&#xff0c;今天发起分会场主题演讲和闪电演讲议题.2014年微软组织成立.NET基金会&#xff0c;微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.N…

E. Almost Sorted(构造,递归)

E. Almost Sorted 我们定义 almost sorted 数组为&#xff0c;ai1≥ai−1a_{i 1} \geq a_i - 1ai1​≥ai​−1&#xff0c;也就是说&#xff0c; 先写几项出来看看&#xff1a; n 1 1 n 2 1 2 2 1 n 3 1 2 3 1 3 2 2 1 3 3 2 1 容易发现一定是&#xff0c;形如x,x−1,x−…