最近在跟着耗子哥的程序员练级指南学习Java底层知识,结合《深入理解Java虚拟机》这本书在看,写笔记,看资料,成长中……

目前看完了第二章JMM和各内存区OOM的情况

一篇图文并茂介绍字节码的文章:

https://mahmoudanouti.wordpress.com/2018/03/20/introduction-to-java-bytecode/


18-07-31更新:

现在已经看完了前五章,从第六章开始,六七八章开始涉及Class的文件构成是什么?类加载的五个步骤“加载、验证、准备、解析、初始化”分别是什么?

看完了常量池这一部分,是Class文件的资源仓库,记录与其他项目关联的数据结构。

使用 javap -verbose 命令可以解析字节码文件。

8/1更新:

看书的速度明显慢下来了,显然开始要读干货了。

今天看了字段表集合这一小节,带着前面对常量池一节的理解,读下来并不难。

字段表,就是类变量以及实例变量的集合。什么与变量有关?首先是访问控制符(private, public, protected), 然后是能否修改(final), 是否为类变量(static), 并发可见性(volatile, 线程是否直接从主内存读), 是否可序列化(transient), 字段数据类型,字段名称。

除了类型和名称,其他的都可以用boolean来表示。类型和名称则是引用常量表里的数据项。

8/6更新:

发现一篇总结比较好的JVM面试题: https://www.cnblogs.com/zuolun2017/p/6121782.html

8/15更新:

最近开始了一项新工作:解析class文件。

今天解析到属性表(attribute field) ,解析Code 和 Exception,并且重构了代码。

Java底层知识学习:Bytecode and JMM的更多相关文章

  1. 极客时间-左耳听风-程序员攻略-Java底层知识

    Java 字节码相关 字节码编程,也就是动态修改或是动态生成 Java 字节码.Java 的字节码相当于汇编,其中的一些细节. Java Zone: Introduction to Java Byte ...

  2. Java基础知识学习(九)

    GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...

  3. 云笔记项目-Java反射知识学习

    在云笔记项目中,补充了部分反射的知识,反射这一部分基础知识非常重要,前面学习的框架Spring和MyBatis读取xml配置文件创建对象,以及JDBC加载驱动等都用了反射,但只知道有这个东西,具体不知 ...

  4. java基础知识学习笔记

    本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...

  5. Java基础知识学习(三)

    面向对象部分 首先要了解面向对象的思想,与C#一致,都是面向对象的语言 访问修饰符 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private ...

  6. Java基础知识学习(一)

    部门接了新项目,后台使用Java框架play framework,前端是html,前后台通过rest交互,能够支持多端的互联网架构. 因为之前没有Java基础,前端使用的也很少,决定深入学习一下Jav ...

  7. Java基础知识学习

    1.什么是Java编程语言 Java是:一种编程语言.一种开发环境.一种应用环境.一种部署环境 2.Java编程语言的主要目标 (1)提供一种解释环境为:提高开发速度.代码可移植性.使用户能运行不止一 ...

  8. Java基础知识学习(八)

    IO操作 5个重要的类分别是:InputStream.OutStream.Reader.Writer和File类 面向字符的输入输出流 输入流都是Reader的子类, CharArrayReader ...

  9. Java基础知识学习(七)

    线程(续) 线程同步 当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization) 可以用两种方法同步化代码.两者 ...

随机推荐

  1. 代码中jndi数据源的支持

    项目中基本都使用Spring框架,支持jndi还是很简单的,只需在spring配置文件中加入 <!-- 使用jndi配置数据源 --> <bean id="dataSour ...

  2. JDBC连接数据库步骤及Class.forName()(转)

    JDBC连接数据库 JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java DataBase Connectivity,java数据库连接)是一种 ...

  3. javaScript判断输入框是否为空

    其中获得和失去焦点的时候都判断了一次 <script> function fun01(f,s){//有参函数 参数不需要参数类型!! try{ var v = document.getEl ...

  4. Oracle数据库零散知识07 -- Materialized view(转)

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...

  5. erlang浅谈

    优点: 1.面向并发,有成熟而且久经考验的框架可供使用,网络部分已经经过了良好封装 2.内存缓存解决方案进程字典,前者的读写速度是50NS-100Ns级别的 3.对二进制数据解析的语法是直观,简单,强 ...

  6. Input ANR处理流程

    ANR时间区别便是指当前这次的事件dispatch过程中执行findFocusedWindowTargetsLocked()方法到下一次执行resetANRTimeoutsLocked()的时间区间. ...

  7. AJAX跨域与JSONP的一点实践经验

    前几个周,项目中遇到了AJAX跨域的问题,然后找资料解决了. 首先要说明一点,关于AJAX的跨域原理和实践,我的经验还是比较少的,我只是大致看了下网上的资料,结合自己的理解,找到了解决办法,暂时不去仔 ...

  8. C++ 类包含关系Demo 笔记

    is-a关系  类包含关系 构造 拷贝构造函数 重载福值运营商 析构函数 动态内存分配和释放 new delete操作 static 数据成员 好友功能 重载输入>>输出<<操 ...

  9. TDM-GCC是从mingw-w64项目patch而来,全部使用静态链接,对线程不需要额外的DLL,默认使用SJLJ异常(真是好东西)

    Windows版GCC之TDM-GCC 4.5.2 平时写 C/C++ 小程序的时候,不喜欢开VS,太庞大了,还要建项目.对于小程序,一个可以进行单文件编译的 IDE 是我的首选,我用的是 C-Fre ...

  10. 【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo

    1.1.1. If a crash happens thisconfiguration does not guarantee that the relay log info will be consi ...