JVM技术周报第2期

JVM技术周报分享JVM技术交流群的讨论内容,由群内成员整理归纳而成。如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,获取入群详情。

1、如何阅读源码?

在我的一个JVM技术交流群里,有人抛出了这样一个问题:

经典框架的源码要怎么读容易些啊?比如spring,mybatis这种。

对于这个问题,群友进行了激烈的讨论。

“源码”,作为菜鸟的我真是还没有想法到这一步,现在总是感觉我做的东西离这个还远呢,根本用不到,看这个干嘛。有时间不如看看别的。源码看了又看不懂,就先不看了吧。然后就这样“说服”自己,避开源码那一块。但是实际上已经工作了两年的我不应该再这样继续昏昏沉沉下去了,虽然我的理想很“丰满”,但是现实……。最近又受了大佬的影响,我自己也想慢慢尝试阅读源码。那么问题来了。如何下手?看哪些?怎么看?

【源码如何“下手”】

我个人认为是先看同事写的代码,因为一个项目总是一个团队完成的,而不是一个人,有的时候在遇到bug的时候,那个bug不一定是你写的,而是别人的代码造成了,那么需要你修复的时候,那这个时候其实就是相当于在看源码,这一步就是开始在看“源码”了。因为所谓的框架的源码也都是别人写的,只不过别人的确实比较“niubility”。

【该看那些源码呢】

在平时做项目时候,我相信String大家都见过的吧。那就先从String这个常见的源码开始。里面一些常用的方法,如:equals、valueOf、length等

【该怎么看呢】

知道了看哪些源码以后,那么该怎么看呢?实际上“看”真的不仅仅是看,你需要仔细看,反复看,然后是自己尝试写,因为你看的再熟悉,哪怕你背出来了,你真不一定能写出来。换句话说,你需要实践,俗话说“实践出真知嘛”,那“能动手就别走着瞧”了。

【大佬们的经验】

刚开始看的时候不要每一行都看,因为你真的不是每一行都能看懂的,最好像String那样,你能会用一些了,然后再分析,然后仿照一些方法自己尝试写来。有些晦涩难懂的就直接跳过,后期再看,不然硬生生强调“都看完了”那没什么用,那也就是在自欺欺人,这样的毅力我们是不需要的。我们需要的是有效那部分。再强调下, 刚开始看千万不要追求每一行都看懂。

我这里将讨论的结论总结一下:

  • 不要追求每行都看懂,而是先看懂框架。不要在不懂的地方过度消耗自己的精力。
  • 要善于学习别人的文章,善于请教别人。
  • 需要找到入口,之后再摸着绳子去阅读。
  • 要有长期作战的心理准备,而不是几天、几周的时间就搞定。
  • 要学会画UML图,通过UML图梳理源码结构。

2、Native Memory、Heap Memory 和 Direct Memory之间的区别和联系

Native Memory 指的是本地内存,其实指的就是应用所运行机器的内存大小。更多时候指的是应用所运行操作系统分配给JVM的内存大小。Heap Memory 指的是JVM运行时数据区中定义的堆内存,其用来存放Java对象等共享的数据。Direct Memory 则是由于NIO产生而诞生的一块数据区,其用来加速IO的读取,其属于 Native Memory 的一部分。

这三者的关系可以如下图所示:

了解这三者之间的关系可以为我们解决一些线上问题打下基础。例如线上发生了OOM异常,但此时的Java堆使用率还很低,那么这时候你可能要怀疑是不是 Direct Memory 出了问题。

参考资料:

  • https://developer.ibm.com/answers/questions/235834/what-is-the-difference-between-native-heap-memory/
  • https://www.ibm.com/developerworks/library/j-nativememory-linux/

3、PC寄存器是什么?它在内存结构中的位置是属于哪里?

PC寄存器也叫程序计数器(Program Counter Register)指的是保存线程当前正在执行的方法。如果这个方法不是 native 方法,那么 PC 寄存器就保存 Java 虚拟机正在执行的字节码指令地址。如果是 native 方法,那么 PC 寄存器保存的值是 undefined。任意时刻,一条 Java 虚拟机线程只会执行一个方法的代码,而这个被线程执行的方法称为该线程的当前方法,其地址被存在 PC 寄存器中。它是运行时数据区的,属于线程的一部分,是线程私有的。

4、为什么0xCAFEBABE是4个字节?

为什么 0xCAFEBABE 是 4 个字节,而不是 8 个字节。我估计很多人搞不清楚。

首先,0xCAFEBABE 是十六进制,我想大家没有异议。对于十六进制的数据来说,它们每位能存储16个值,这就相当于二进制的 4 个位,也就是说 0x0F = 1111 = 15(十进制)。也就是说一个十六进制位相当于二进制的4个位(bit)。

那么两个 16 进制位,是不是相当于 8 个位,8 bit。

那么 8 bit = 1 字节。所以两位 16 进制 = 1 字节。

所以 CAFE = 2字节,BENE = 2 字节。

一共 4 个字节。

转载于:https://www.cnblogs.com/chanshuyi/p/jvm_weekly_02.html

JVM技术周报第2期相关推荐

  1. JVM技术周报第1期

    JVM技术周报 · 第1期 JVM技术每周分享整理了JVM技术交流群每周讨论的内容,由群内成员整理归纳而成.如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友, ...

  2. 大数据技术周报第 005 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第四期,记录过去一周一点所见所闻. 文章目录 技术一瞥 文章 资源 订阅 技术一瞥 1.什么是ETL? 引用:https://en.w ...

  3. 大数据技术周报第 009 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 这是第 9 期分享,记录过去一周关于大数据的见闻,保证信息的质量和溯源. 文章目录 技术一瞥 文章 资源 订阅 技术一瞥 1.Kafka 最近 ...

  4. 大数据技术周报第 007 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第 7 期,记录过去一周一点所见所闻. 文章目录 技术一瞥 图片 文章 资源 订阅 本期主题:实时数仓 技术一瞥 做实时数仓经历了什么 ...

  5. 大数据技术周报第 006 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第 6 期,记录过去一周一点所见所闻.假期玩(。・∀・)ノ゙嗨了. 文章目录 技术一瞥 图片 文章 资源 订阅 技术一瞥 1.hdfs ...

  6. 大数据技术周报第 004 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第 4 期,记录过去一周一点所见所闻. 文章目录 图片 文章 资源 订阅 图片 文章 1.Flink 1.9 发布,有你期待的功能吗 ...

  7. 大数据技术周报第 003 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第三期,记录过去一周一点所见所闻.上周好像忘记发了?是的- 文章目录 技术一瞥 图片 文章 资源 视频 订阅 技术一瞥 1.Kafk ...

  8. 大数据技术周报第 001 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第一期,记录过去一周一点所见所闻. 文章目录 最佳 技术一瞥 图片 文章 资源 订阅 最佳 1.TDengine TDengine是 ...

  9. 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用

    新闻 \\ \\t <Ubuntu 16.04 LTS 已在英特尔 NUC 和物联网主板上获得认证>在全球拥有数百万用户的热门GNU/Linux发行版本--Ubuntu的背后公司Canon ...

最新文章

  1. 第一个PhoneGap程序以及错误解决
  2. mysql联合索引的数据结构
  3. python三元表达式
  4. python递归算法_python递归算法(上)
  5. 三维向量变化为角度_物体的三维识别与6D位姿估计:PPF系列论文介绍(四)
  6. 端口隔离配置命令、端口镜像(抓包配置)详解(附图,建议PC观看)
  7. toj 4596 一行盒子
  8. Windows 7关闭和开启系统休眠
  9. 如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹
  10. 计算机哪个是易失性存储器,易失性的存储器是什么?
  11. 计算机桌面运维问题分类,桌面运维工程师常见面试问题汇总
  12. python浪漫代码表白npy_【师大表白墙】表白wdl小姐姐,一眼看过去就记住的女孩子,笑起来时眼睛里有星星在闪烁~...
  13. php创建留言板,PHP开发留言板教程之创建数据库
  14. 虚拟机VMware官网下载教程,中文详细步骤(图文)
  15. DCT和IDCT原始公式计算
  16. 云部署中的 公有云 私有云 混合云 社区云 基本概念快速掌握
  17. 完全卸载SQL server 2005的方法
  18. 四通一达归于阿里后就涨价,证明资本的目标就是以垄断攫取利润
  19. 虚拟机中新增磁盘空间并开机自动挂载
  20. 计算机控制电缆灰色和蓝色,计算机电缆、控制电缆区别

热门文章

  1. Eclipse中怎样使用ERMaster进行单表设计并导出为DDL
  2. C#中删除目录以及目录下文件的方法
  3. Thymeleaf中使用if和unless实现状态的判断显示达到if-else逻辑判断的效果
  4. 数据结构-队列详解(类C语言版)
  5. VUE—从入门到飞起(五)
  6. 部署文档撰写经验分享
  7. android读取短信内容简书,Android 获取App信息
  8. 神策数据李文浩:企业服务如何破局增长?
  9. LILY 英语携手神策数据 数据赋能少儿英语学习创新体验
  10. 剑指Offer(java答案)(51-60)