java深入篇
文章平均质量分 95
淡淡的倔强
不怕千万人阻挡,只怕自己投降!
展开
-
Java并发:volatile内存可见性和指令重排
摘要volatile两大作用:1、保证内存可见性2、防止指令重排此外需注意volatile并不保证操作的原子性。一、内存可见性1、概念JVM内存模型:主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存(比如CPU的寄存器),线程只能访问自己的工作内存,不可以访问其它线程的工作内存。工作内存中保存了主内存共享变量的副本,线程要操作这转载 2017-05-10 18:13:54 · 1631 阅读 · 0 评论 -
指令重排、happens-before规则
一、 指令重排指令重排序 Java 语言规范规定了JVM线程内部维持顺序化语义,也就是说只要程序的最终结果等同于它在严格的顺序化环境下的结果,那么指令的执行顺序就可能 与代码的顺序不一致。这个过程通过叫做指令的重排序。指令重排序存在的意义在于:JVM能够根据处理器的特性(CPU的多级缓存系统、多核处理器等)适当 的重新排序机器指令,使机器指令更符合CPU的执行特点,最大限度的发挥机器的性能。重原创 2017-05-11 11:44:36 · 2845 阅读 · 0 评论 -
ThreadLocal 内部实现、应用场景和内存泄漏
一、什么是ThreadLocal 首先明确一个概念,那就是ThreadLocal并不是用来并发控制访问一个共同对象,而是为了给每个线程分配一个只属于该线程的变量,顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突,实现线程间的数据隔离。从线程的角度看,就原创 2017-05-11 17:39:37 · 10460 阅读 · 7 评论 -
Linux IO模式-阻塞io、非阻塞io、多路复用io
原文地址:Linux IO模式-阻塞io、非阻塞io、多路复用io一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O1)、用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,转载 2017-07-19 21:08:08 · 1605 阅读 · 0 评论 -
I/O 多路复用之select、poll、epoll详解
原文地址:Linux IO模式-阻塞io、非阻塞io、多路复用ioI/O 多路复用之select、poll、epoll详解 select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写转载 2017-07-19 21:11:56 · 1560 阅读 · 0 评论 -
Java中的序列化Serialable详解
本文转载自Java中的序列化Serialable高级详解将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔转载 2017-07-24 11:02:39 · 2621 阅读 · 1 评论 -
动态生成字节码--Javassist
前言Javaassist是一个高层的Java字节码处理类库,能运行时动态生成类,修改类。Javaassit能动态生成类的基础源于JavaClass的字节码技术:只要遵从规范,JavaClass可以来自任何地方。类似的技术还有:bcel,asm等,他们相对于Javaassit,偏向底层,效率较高,但编码难度更高(需要了解JVM指令)。Javaassist是Jboss的一个子项目,其特点是简单:不...转载 2018-08-15 18:31:41 · 1270 阅读 · 0 评论 -
动态代理系列(一)JDK动态代理-超详细源码分析
本文转载自JDK动态代理-超详细源码分析一、为什么需要动态代理1.1 从代理模式说起代理模式是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。这种模式有什么用呢?它可以在原对象的基础上增强原对象的功能,比如在原对象调用一个方法的前后进行日志、事务操作等。Spring AOP就使用了代理模式。1.2 代理模式—-静态...转载 2018-09-07 17:06:51 · 3187 阅读 · 1 评论 -
动态代理系列(二)CGLib动态代理
转载自:CGLib动态代理的介绍及用法(单回调、多回调、不处理、固定值、懒加载)本文将介绍下CGLib动态代理及几种用法。CGLib(Code Generation Library)是一个高效的代码生成库,底层实现是使用asm来转换字节码生成类。在生成代理类的场景中,由于JDK动态代理必须要求源对象有实现接口,而实际场景中,并不是所有类都有实现接口,因此使用CGLib可以用在未实现接口的类上。...转载 2018-09-07 19:04:39 · 349 阅读 · 0 评论 -
动态代理系列(三)JDK动态代理和CGLIB代理的区别
本文转载自:动态代理:JDK动态代理和CGLIB代理的区别代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。而AOP,是通过动态代理实现的。一、简单来说: JDK动态代理只能对实现了接口的类生成代理,而不能针对类 CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其...转载 2018-09-07 19:11:31 · 1157 阅读 · 0 评论 -
动态代理系列(扩展篇)RPC实现原理
本文转载自:扒一扒RPC因为RPC是基于动态代理的。想必大家都听过RPC,但是可能并没有针对的去了解过,因此本文打算以如下结构讲一讲RPC:①尽量浅显易懂的描述RPC的工作原理。②分析一个RPC的Demo。一、 走近RPC1.1 什么是RPCRPC是Remote Procedure Call的缩写,即远程过程调用,意思是可以在一台机器上调用远程的服务。在非分布式环境...转载 2018-09-17 17:39:04 · 945 阅读 · 2 评论 -
Java中SPI机制详解
本文转载于高级开发必须理解的Java中SPI机制本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。一、 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口...转载 2019-10-10 15:46:12 · 2199 阅读 · 1 评论