- 博客(15)
- 收藏
- 关注
原创 this逃逸与安全发布
什么是this逃逸?this逃逸是指当一个对象还没有完成构造(构造方法尚未返回)的时候,其他线程就已经可以获得到该对象的引用,并可以通过该引用操作该对象this逃逸有什么问题?由于对象尚未完整构造,所以此时访问到的对象尚未完全初始化,通过该引用调用对象方法或者访问实例数据可能会带来意想不到的结果。通过一个例子来看:这个例子中,我们在ThisEscap
2018-02-08 17:44:49
371
原创 《深入理解Java虚拟机》读书笔记9--线程安全与锁优化
线程安全线程安全,耳熟能详,但想准确的描述并不容易。这里借用《Java Concurrency In Practice》作者Brian Goetz对其的一个定义:“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者再调用方法进行任何其他的协调操作,调用这个对象的行为就可以获得正确的结果,那这个对象是线程安全的”这个定义比较完整,它
2018-02-07 21:22:09
275
原创 服务监控(技术框架Flume、Kafka、Storm、Hadoop基础)小结
主要涉及到的技术框架:flume(日志收集及传输)、kafka(消息队列)、storm(流式计算)、hadoop(离线分析),这几项技术也是大数据方面较为成熟和常用的技术方案。大数据是未来的一个热点方向,涉及的技术和思想也十分丰富。本文仅对此次服务监控中应用到的主要技术框架的基本原理和核心概念做一介绍Flume:1. 简介:Flume ng是cloudera提供的一个分布式
2018-01-27 21:30:01
2524
原创 《深入理解Java虚拟机》读书笔记8--Java内存模型与线程
在许多情况下,让计算机同时处理多个任务,不仅是因为计算机的处理能力太强大,另一个重要的原因是计算机的计算速度与它的存储和通信系统速度差距太大,大量时间被浪费在磁盘及网络IO上硬件效率与一致性虚拟机在处理并发时遇到的问题与物理机有不少类似,因此我们先来简单看一下物理机针对并发的处理方案由于计算机存储设备与计算速度之间有几个数量级的差距(即使内存也是如此),因此在内存与处理器之
2018-01-27 16:09:20
327
原创 Zuul源码解读
最近这段时间在使用Zuul,顺便简单阅读了一下源码。本文旨在对自己阅读到的源码做一点小结,以后日后回顾。不追求面面俱到,细致入微,看到哪里写到哪里吧关于Zuul的介绍及基本使用就不在此赘述了,网上有很多这方面的文章入口:系统启动时处理@EnableZuulProxy,重点是其中的ZuulProxyConfiguration.class底层http库:ZuulProxyConfiguration.c
2018-01-17 20:12:25
2639
2
原创 怎样配置Feign使用HttpClient
背景:默认情况下,feign通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图,源码详见feign.Client.Default),这种情况下,由于缺乏连接池的支持,在达到一定流量的后服务肯定会出问题 方案:默认配置显然不足以支撑生产环境的服务,因此我们需要使用更加完备的方案。下面我们以HttpClient作为事例,来看一下怎样改变feign的底
2018-01-16 09:43:43
15031
1
原创 《深入理解Java虚拟机》读书笔记7--运行期优化
记得在大学刚开始学习Java的时候,也许是为了让大家好理解,老师说Java是一门解释执行的语言。但是现在回顾这句话,这种说法可能就不是那么准确了实际上,Java程序在启动最初是通过解释器进行解释执行的,但是当某个方法或者代码运行非常频繁的时候,虚拟机就会把这部分代码视为“热点代码”(Hot Spot Code),在运行时将这部分代码编译成平台相关的机器码,并且进行各种层次的优化,以提高热点
2018-01-08 16:33:59
474
原创 Feign接口JSON数据转Date类型数据慢8小时问题
今天记一次错误排查及解决笔记现象最近在接口联调中发现一个现象,前端传入JSON格式数据,其中包含Long型时间戳,但是在调用Feign接口(有Date类型参数)的时候,发现Date类型参数总是比正确时间慢8小时比如{"time":1515147840000},正确的Date类型时间应该是“2018-01-05 18:24:00”,但是经过Feign内部Encoder转换后的Da
2018-01-06 17:52:17
4258
1
原创 CAS笔记
需求多个应用系统需要实现登录功能,并且账号体系是同一套,同时为了提升使用体验(一次登录,即可访问多个相互信任的应用系统),因此需要搭建一套sso系统。sso的基本原理可以参考现实生活中的公园“通票”,一个公园中可能包含多个景区,每个景区需要分别购票才可游览,也可以选择购买通票,有了通票就可以在此多个景区间无障碍通行选型前提是尽量避免重复造轮子,考虑使用开源方案。开源方案中较为有
2018-01-05 09:24:53
424
原创 《深入理解Java虚拟机》读书笔记6--编译期优化
说起Java语言的编译期,它可能是指编译器把Java源码文件转变为Class字节码文件的过程,也可能是指虚拟机在运行时把字节码转变为机器代码的过程(JIT编译器,Just In Time Compiler)。本章我们来讨论一下上面提到的第一类编译过程Javac编译器我们都直接或间接的使用过Javac编译器,它可以将Java源码文件编译为Class字节码文件。Javac做了许多针对Jav
2018-01-04 10:01:15
250
原创 《深入理解Java虚拟机》读书笔记5--字节码执行引擎
字节码执行引擎是Java虚拟机最核心的组成部分之一。虚拟机是相对于物理机的概念,两者都有代码执行能力。不同的是物理机的执行引擎直接建立在物理硬件和操作系统层面上,而虚拟机的执行引擎则有自己的指令集,可以执行不被硬件直接支持的指令Java虚拟机规范中制定了虚拟机执行引擎的概念模型,不同的虚拟机只要满足这个概念模型的要求(输入字节码,处理过程是字节码解析的等效过程,输出执行结果),具体的实现可以自行制
2018-01-02 11:36:24
406
原创 《深入理解Java虚拟机》读书笔记4--类加载机制
所谓类加载机制,就是虚拟机将Class文件加载到内存,对数据进行校验、解析、初始化,然后转化为可被虚拟机使用的数据类型的过程与静态连接的语言不通,Java采用动态连接方式,这种策略在运行时虽然会增加一些性能开销,但是却给程序提供了高度的灵活性。比如我们可以通过自定义类加载器的方式,在运行时通过网络进行类加载;也可以在运行时为一个接口指定其实现类类加载时机类的整个生命周期包括:加载、验证、准备、解析
2018-01-01 10:47:26
242
原创 《深入理解Java虚拟机》读书笔记3--类文件结构
很遗憾,这将是很枯燥的一章,但是如果想较为深入的理解JVM,这一章又很有必要硬着头皮搞清楚。如果之前没有接触过类似的内容,那么有很大的可能第一次基本读不懂,如果出现这样的情况也没有关系,请继续保持学习,并且隔段时间再次重新阅读。像我这样不够灵光的脑袋,学习了3遍也就能够掌握基本原理。其实,只要掌握了对应的规则,类文件的内容又是很容易解读的,请保持你的耐心与好奇Java号称跨平台,那么究竟是什么能够
2017-12-31 16:06:27
293
原创 《深入理解Java虚拟机》读书笔记2--垃圾收集(GC)与内存分配
垃圾收集(Garbage Collection,GC),其实主要需要完成3件事情:哪些内存需要回收?什么时候回收?如何回收?对于程序计数器、虚拟机栈以及本地方法栈,这三块内存区域是线程私有的,伴线程生,随线程死,并且每一个栈帧需要的内存在类结构确定后基本就确定了,因此对于这几块区域,内存的分配以及回收具备可确定性,当方法结束或者线程结束时,内存随之回收但是对于堆以及方法区,运行时才能确定需要创建哪
2017-12-30 10:32:06
304
原创 《深入理解Java虚拟机》读书笔记1--Java内存区域
《深入理解Java虚拟机》是我个人读过的第一本关于JVM方面的书籍。十分有幸能够读到这本书,在此对作者表示深刻的敬意不知道有没有人和我一样有类似的情况,就是一本书读完,经过一段时间之后,林林总总最后留在脑子里的并不多,很多东西又还给了作者。有人可能会说,之所以会遗忘,是因为你根本没有理解。我并不否认这点,说实话,很多书读过一遍之后都会存在没有读懂的部分。但是随着我们阅历的丰富以及期间不断的学习,过
2017-12-29 17:50:36
342
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人