自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(190)
  • 资源 (8)
  • 收藏
  • 关注

原创 jvm原理(37)JVM内存空间划分与作用详解

JVM内存区域分了如下几个区域:虚拟机栈(Stack Frame)在执行一个方法的时候,会有一个栈帧,用来存储,方法里边的操作数的出栈入栈,当java文件编译完成的时候,max_stack(栈最大的深度),max_local(最大局部变量表有多少个元素)等都是确定的。程序计数器(Program Counter)记录方法执行的位置,线程切换回来之后继续从这个位置执行。本地方法栈主要执行本...

2019-04-13 18:08:34 713 2

原创 jvm原理(36)透过字节码生成审视Java动态代理运作机制

我们在使用spring这类框架的时候,基于动态代理的使用,比如AOP,会使得开发更加灵活,那么在字节码的层面动态代理是什么样子的呢,生成出来的代理类结构是什么,本次我们首先写一个动态代理的例子,然后得到生成的动态代理类。定义接口:public interface SubJect { void request();}定义实现类:public class RealSubJect i...

2019-04-13 18:06:00 601 2

原创 jvm原理(35)基于栈的指令集与基于寄存器的指令集详细比对&执行栈指令集实例剖析

基于栈的指令集与基于寄存器的指令集详细比对现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。所谓解释之行,就是通过解释器来读取字节码,遇到相应的指令就去执行该指令。所谓编译执行,就是通过即时编译器(just in time jit)将字节码转换为本地机器码执行,现代jvm会根据代码热点生成相应的本地机器码。执行的方式有基于栈的和基于寄存器的执行方式:基于栈...

2019-04-13 18:04:37 1221 1

原创 jvm原理(34)虚方法表与动态分派机制详解

编写代码:public class MyTest7 { public static void main(String[] args) { Animal animal = new Animal(); Animal dog = new Dog(); animal.test("hello"); dog.test(new D...

2018-09-15 12:05:13 4721 4

原创 jvm原理(33)通过字节码分析Java方法的静态分派与动态分派机制(invokevirtual 指令)

编写代码:public class MyTest6 { public static void main(String[] args) { Fruit apple = new Apple(); Fruit orange = new Orange(); apple.test(); orange.test(); ...

2018-09-15 11:08:38 787

原创 jvm原理(32)方法重载与invokevirtual字节码指令的关系

1、invokeinterface:调用接口中的方法,实际上是在运行期决定的,决定到底调用实现该接口的那个对象的特定方法。42、invokestatic : 调用静态方法3、invokespecial: 调用自己的私有方法,构造方法()以及父类的方法。4、invokevirtual: 调用虚方法,运行期动态查找的过程。5、invokedynamic: 动态调用方法。invokest...

2018-09-15 10:00:37 1536 2

原创 jvm原理(31)栈帧与操作数栈剖析及符号引用与直接引用的转换

修改一下上一节的程序:public class MyTest3 { public void test() throws FileNotFoundException,IOException,NullPointerException{ try { InputStream inputStream = new FileInputStream("tes...

2018-09-08 12:49:27 1095 1

原创 jvm原理(30)通过字节码分析this关键字以及异常表的重要作用&通过字节码分析Java异常处理机制

通过字节码分析this关键字以及异常表的重要作用 编写代码:public class MyTest3 { public void test(){ try { InputStream inputStream = new FileInputStream("test.text"); ServerSocket serverSoc...

2018-09-08 11:32:59 626

原创 jvm原理(29)构造方法与静态代码块字节码指令详解

上一节解析完了常量池,接下来是访问标记, 00 21 : ACC_SUPPER + ACC_PUBLIC 紧接着是类的名字,2个字节:00 05 是5号常量 【#5 = Class #49 // com/twodragonlake/jvm/bytecode/MyTest2】 父类的名字,占2个字节:00 0D 是13号常量:【#13 =...

2018-08-26 14:01:35 868 2

原创 jvm原理(28)synchronized关键字所生成的字节码详细分析&&复杂字节码文件的分析过程

前边我们解析了一个字节码文件,现在我们做一个比较复杂的字节码文件的解析,程序如下:package com.twodragonlake.jvm.bytecode;public class MyTest2 { String str = "Welcome"; private int x = 5; public static Integer in = 10; ...

2018-08-25 22:35:04 1875 1

原创 jvm原理(27)Java字节码方法表与属性表深度剖析

上一节说到成员变量,这一节说一下方法表 图一: 图二: 图三: 行号00000120 开始就是方法表的开始,刚开始2个字节是方法的数量:00 03 是三个方法(无参构造器、变量a的get和set方法) 方法表: 类型 名称 数量 u2 access_flags 1 u2 name_index 1 u2 desc...

2018-08-04 21:55:57 3278

原创 jvm原理(26)字节码访问标志与字段表详解

先看一下java字节码的结构: 图1: 图2: 图3: Class字节码中有2中数据结构字节数据直接量:这是基本的数据类型。共细分为u1、u2、u4、u8四种,分别代表连续的1个字节 、2个字节、四个字节、8个字节组成的整体数据。表(数组):表示由多个基本数据或其他表,按照既定顺序组成的大的数据集合。表是有结构的, 它的结构体现在:组成表的成分所在的位置和顺序都是已...

2018-08-04 15:09:51 1164 2

原创 jvm原理(25)Java字节码文件结构剖析

编写java文件:public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { this.a = a; }}我要要看一下java文件对应的class文件的结构,定位到工程的...

2018-07-29 15:29:12 454

原创 jvm原理(24)通过JDBC驱动加载深刻理解线程上下文类加载器机制

public class MyTest27 { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:...

2018-05-01 22:53:02 1868 5

原创 jvm原理(23)线程上下文类加载器实战分析与难点剖析

我们紧接着上一个例子的代码进行:public class MyTest26 { public static void main(String[] args) { ServiceLoader<Driver> serviceLoader = ServiceLoader.load(Driver.class); Iterator<Drive...

2018-04-24 21:46:16 866

原创 jvm原理(22)线程上下文类加载器本质剖析与实做&ServiceLoader在SPI中的重要作用分析

线程类上下文加载器的一般使用模式(获取-使用-还原) ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try{ Thread.currnetThread().setContextClassLoader(targetTccl); myMethod(...

2018-04-23 23:17:06 1359

原创 jvm原理(21)线程上下文类加载器分析与实现

看一个程序来一下感性的认识:public class MyTest24 { public static void main(String[] args) { System.out.println(Thread.currentThread().getContextClassLoader()); System.out.println(Thread.cla...

2018-04-15 17:32:02 1398

原创 jvm原理(20)Launcher类源码分析以及forName方法底层剖析

上一节我们通过【ClassLoader.getSystemClassLoader()】得到系统类加载器,那么本节看一下这个方法的doc以及一些细节,方便我们更好的理解: public static ClassLoader getSystemClassLoader() Returns the system class loader for delegation. This is the defa...

2018-04-15 16:14:53 1311 2

原创 jvm原理(19)平台特定的启动类加载器深入分析与自定义系统类加载器详解

程序:public class MyTest23 { public static void main(String[] args) { System.out.println(System.getProperty("sun.boot.class.path")); System.out.println("-------------------------...

2018-04-06 18:39:25 644

原创 jvm原理(18)类加载器命名空间总结与扩展类加载器要点分析

类加载双亲委托模型的好处: 1、可以确保Java核心库的类型安全:所有的Java应用都至少会引用Java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载到Java虚拟机中,如果这个加载过程是由Java应用自己的类加载器所完成的, 那么很有可能就会在JVM中存在多个版本的java.lang.Object类,而且这些类库中的类的加载工作都是由启动类加载器...

2018-04-06 16:54:57 615

原创 jvm原理(17)类加载器命名空间深度解析与实例分析

我们在 上一节讲到实例基础上做一下改动:public class MyTest21 { public static void main(String[] args) throws Exception{ MyTest16 loader1 = new MyTest16("loader1") ; MyTest16 loader2 = new MyTest...

2018-04-06 15:53:52 311

原创 jvm原理(16)类加载器实战剖析与疑难点解析

三大类加载器所加载的路径范围:public class MyTest18 { public static void main(String[] args) { System.out.println(System.getProperty("sun.boot.class.path"));//系统类加载器加载路径 System.out.println(Sy...

2018-04-05 21:21:00 280

原创 jvm原理(15)类加载器命名空间实战剖析与透彻理解

新建类MyTest17_1:public class MyTest17_1 { public static void main(String[] args) throws Exception{ MyTest16 loader1 = new MyTest16("loader1"); loader1.setPath("E:\\data\\classes...

2018-04-05 19:34:38 1181

原创 jvm原理(14)自定义类加载器在复杂类加载情况下的运行分析

接着上次的[事例](https://blog.csdn.net/wzq6578702/article/details/79601719) 我们上次加载的类都是MyTest的这样的一个类,但是如果我们要加载的类里边还有其他的一些类,那么加载器对于这种嵌套的情况是怎么工作的呢?新建一个类MyCatpublic class MyCat { public MyCat(){ ...

2018-04-05 16:48:33 229

原创 jvm原理(13)类的命名空间与卸载详解及jvisualvm使用

类的命名空间 上篇文章的结尾到了命名空间的问题,我们接下来继续演进程序,我们删除当前工程的MyTest.class文件,然后修改main方法: public static void main(String[] args) throws Exception { MyTest16 myClassLoader = new MyTest16("myClassLoader");...

2018-03-18 19:54:19 383

原创 jvm原理(12)类加载器双亲委托机制实例深度剖析

我们在之前写过的一个自定义类加载器: 我们修改一下程序的findClass方法: protected Class<?> findClass(String className) throws ClassNotFoundException { System.out.println("findClass invoked "+className); ...

2018-03-18 16:27:07 364

原创 jvm原理(11)类加载器重要方法详解

上一节 我们写了一个类加载器的实现,其中一个重要的方法是findClass,看一下它的介绍: https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean) findClass:/** * Finds the class with...

2018-03-18 14:32:45 402

原创 jvm原理(10)自定义类加载器深入详解

上一节走读了类加载器的Java doc,这一节我们实现一个自定义的类加载器:public class MyTest16 extends ClassLoader { private String classLoaderName; private final String fileExtension = ".class"; public MyTest16(Stri...

2018-03-13 22:38:00 307

原创 jvm原理(9)ClassLoader源码分析与实例剖析

https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.htmlpublic abstract class ClassLoader extends ObjectA class loader is an object that is responsible for loading classes. The class C...

2018-03-13 21:55:50 749

原创 jvm原理(8)不同的类加载器与加载与加载动作分析

这段程序打印出系统类加载器到最上层的加载器的结构关系:public class MyTest13 { public static void main(String[] args) { ClassLoader classLoader = ClassLoader.getSystemClassLoader(); System.out.println(cla...

2018-03-12 22:04:10 538

原创 jvm原理(7)类加载器与类初始化深度剖析

exampleA: 打印结果是3 ,并且静态代码块不会执行,原因是x是常量,在编译期就会放到MyTest8的常量池当中,然后FinalTest和MyTest8就没有任何关系了,可以通过反编译的结果看到。 把x的final去掉之后,静态代码块会打印,再去看反编译结果:javap -c com.twodragonlake.jvm.classloader.MyTest8Compiled ...

2018-03-04 13:25:10 355

原创 jvm原理(6)类加载器双亲委托机制详解

类加载器层级: 类加载器的父类委托机制 在父类委托机制中,各个加载器按照按照父子关系形成树形结构(逻辑意义的树形结构),除了根类加载器之外,其余的类加载器都有且只有一个父加载器。加载过程举例: loader1拿到Sample的字节码的时候会把Sample交给loader1的父级加载器【系统类加载器】加载,【系统类加载器】还有一个父级加载器【扩展类加载器】然后将Sampl...

2018-03-03 15:23:59 4918

原创 jvm原理(5)类加载器深入解析及重要特性剖析

类进入内存的过程: 类的加载的最终产品是位于内存中的Class对象。Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区的数据的接口。类是反射的入口。有两种类型的类加载器:Java虚拟机自带的加载器 根类加载器(Bootstrap)扩展类加载器(Extension)系统(应用)类加载器(System) 用户自己定义的类加载器java.lan...

2018-02-27 22:39:31 360

原创 jvm原理(4)接口初始化规则与类加载器准备阶段和初始化阶段的重要意义

先看一段代码:public class MyTest5 { public static void main(String[] args) { System.out.println(MyChild5.b); }}interface MyParent5{ public static final int a = 5;}interface M...

2018-02-26 21:49:23 1052

原创 jvm原理(3)编译期常量与运行期常量的区别及数组创建本质分析

上一个例子我们用的final是一个字面量“hello world”,这次我们改一下使用UUID为常量赋值,注意:UUID是多少只有在运行期间才会被确定。public class MyTest3 { public static void main(String[] args) { System.out.println(MyParent3.str); }}...

2018-02-25 18:38:19 544

原创 jvm原理(2)常量的本质含义与反编译及助记符详解

先运行一段程序:public class MyTest2 { public static void main(String[] args) { System.out.println(MyParent2.str); }}class MyParent2{ public static final String str = "hello worl...

2018-02-25 17:18:02 737 4

原创 jvm原理(1)类加载器深入解析与阶段分解

类加载在Java代码中,类型(class 、interface、 enum etc)的加载(将字节码从磁盘加载到内存),连接(类与类之间的关系的连接)与初始化过程都是在程序运行期间完成的,加载,连接,初始化顺序不是固定的,不同的虚拟机实现不一样。提供了更大的灵活性,增加了更多的可能性。类加载器深入剖析Java虚拟机与程序的周期在如下几种情况下,Java虚拟机将结束生命周期。 ...

2018-02-25 16:04:26 916 1

原创 netty源码分析(二十五)Netty自定义协议与TCP粘包拆包问题解决之道

上一节说了TCP的粘包和拆包,用一个实例的方式做了说明,那么在netty里面是怎么解决粘包和拆包问题呢,这就需要编解码器,我们写一个简单的自动以协议的demo,说明一下编解码器在解决tcp粘包和拆包的解决方式。 先罗列一下服务端的代码: MyServer负责服务端的启动:public class MyServer { public static void main(String[] arg

2017-12-24 12:40:02 1223 2

原创 netty源码分析(二十四)TCP粘包与拆包实例演示及分析

关于粘包与拆包的概念这里不再熬术,下面举一个粘包的例子: 客户端启动的时候向服务端写入了10条消息,然后服务端接收到消息之后,回写客户端一条UUID,客户端打印服务端发过来的UUID MyServer:public class MyServer { public static void main(String[] args) throws InterruptedException {

2017-12-17 19:40:50 521

原创 netty源码分析(二十三)ReplayingDecoder源码分析与特性解读以及其他编解码器介绍

在介绍ReplayingDecoder之前 想看一下它的用法,构建一个服务端和客户端的模型: 服务端:public class MyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGroup = new NioEventLoopGr

2017-12-17 17:59:10 4588 4

centos7_hadoop2.7.3_编译所需工具

在centos7下编译hadoop2.7.3所需工具:apache-ant-1.9.4-bin.tar.gz、apache-maven-3.3.3-bin.tar.gz、findbugs-3.0.1.tar.gz、hadoop-2.7.3-src.tar.gz、protobuf-2.5.0.tar.gz

2017-04-17

amoeba-mysql-binary-2.1.0

阿里的一位同学开发的一个基于Mysql Client和Server之间的中间层,它具有读写分离、数据切分和过滤等一些分布式数据库常见的一些功能。

2016-08-07

spring源码解析

spring源码解析,ioc,aop,beanfactory,acegi

2015-03-08

spring3.1.2源码包

spring-framework-3.1.2.RELEASE-with-docs源代码 官方下载的。

2015-01-21

英语四六级

英语四六级是需要技巧的 亲....,,这是我们老师给的哦..

2013-03-28

oracle11g驱动包

oracle 11G的JDBC驱动包,用于在eclipse中导入,

2012-04-14

数据结构\数据结构习题山东科技大学.xps

一套数据结构的习题,清华大学出版社配套的,选择,填空,算法,简答

2011-12-10

ktv程序

2011-06-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除