个人简介

Echo Blog


江湖无名 安心练剑
  • Java 线程安全之 ThreadLocal 详解及源码分析
    ThreadLocal 典型的使用场景 典型使用场景: 每个线程都有一个独享的对象 通常是工具类 典型需要使用的类simpleDateFormat和Random每个thread内有自己的实例副本不共享 教材只有一本 每个人都抢着看 那么这终究会有线程安全问题 模拟场景 1000个线程都需要去打印日期 simpleDateForma...
    2018-10-08 09:55:28 | Java
  • JVM-13-runtime optimize
    概述 JIT 即时编译器(JIT=just in time compiler)定义:为了提高热点代码的执行效率,在运行时,虚拟机将把这些代码编译成与 本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器; 事实上,现在许多主流的商用虚拟机,都同时包含有解释器与编译器,解释器与编译器两者各有优势。与解释器相比,编译器会将常运行到的代码编译成本地代码区实现,可以获...
    2018-10-08 08:04:16 | JVM
  • JVM-13-compile optimize
    JVM编译器优化 JVM的编译器可以分为三个编译器: 1、前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2、JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3、AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。 Javac编译器 Javac...
    2018-10-08 08:04:16 | JVM
  • JVM-12-远程执行代码
    整体思路 如果远程系统需要执行一段代码,但是我们现在又没有入口。 可以通过这种方式。 实际上对于日志信息,可能某个调用信息没有打印,也可以通过这个方式。 代码实现 核心代码 ByteUtils.java package org.jvm; /** * Bytes数组处理工具 */ public class ByteUtils { public static int ...
    2018-10-08 08:04:16 | JVM
  • JVM-11-字节码类加载实战
    类加载 OSGI 学习类加载机制 jboss 源码学习 JEE 标准 Tomcat 学习经典的类加载机制 动态字节码 以前使用 spring aop 最多使用的就是动态代理和动态字节码。 CBLIB AMS 不同 jdk 版本之间的转换 Retrotranslator 可以将 1.5 版本的 jdk 转换为以前的 jdk 版本。 参考资料 《深入理解 jvm》 ...
    2018-10-08 08:04:16 | JVM
  • JVM-10-虚拟机字节码执行引擎
    Java虚拟机的执行引擎 输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 本章主要是从概念模型的角度讲解虚拟机的方法调用和字节码执行。 帧栈 帧栈是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。 每一个帧栈中都包括以下信息:局部变量表(Local Varable Table)、操作数栈(Operand Stack...
    2018-10-08 08:04:16 | JVM
  • JVM-09-classloader
    ClassLoader 官方概念,看一下即可。 类定义 public abstract class ClassLoader extends Object 概念 类装入器是负责装入类的对象。类类装入器是一个抽象类。给定类的二进制名称,类装入器应该尝试定位或生成构成类定义的数据。 典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。 每个类对象都包含对定义它的...
    2018-10-08 08:04:16 | JVM
  • JVM-08-bytecode
    Bytecode 字节码指令 jvm 内部细节 本文分为三部分,每一部分都分成几个小节。 每个小节都可以单独阅读,不过由于一些概念是逐步建立起来的,如果你依次阅读完所有章节会更简单一些。 每一节都会覆盖到Java代码中的不同结构,并详细介绍了它们是如何编译并执行的。 变量 局部变量 JVM是一个基于栈的架构。方法执行的时候(包括main方法),在栈上会分配一个新的帧,这个栈帧包...
    2018-10-08 08:04:16 | Java