Gambol's Blog

记录真实的gambol

如何写代码

"写代码三部曲"

起因 本来是要做一个ppt介绍的. 写了ppt, 放在博客上做个纪念吧. 请 下载 PDF.

如何做好架构

"架构类文章小抄"

写在前面的话 记录看到不错的架构文章.加上自己的思考. 不定期更新. 现在包含了两篇文章 软件设计杂谈 Martin Fowler阐述“牺牲的架构” 软件设计杂谈 url: https://zhuanlan.zhihu.com/p/20005177 这篇文章很赞, 里面的许多观点我非常赞同. 前提 搞懂需求. 分析需求, 弄清楚需求的底层原因和想要解决的问题...

崇文区看房记录

崇文房子实体考察

前言 这些看房日志都发表于私人微信公众号“笔筒看房日志”上. 背景 学区房需求,从来没看过东西城的房子,从稍微便宜的东城入手。先考察了老东城,把老东城各个学区的90年之后的房子都列出来了,发现老东城的新房子实在太少(00年之后的);从而,把目标转向老崇文的东花市-崇文门-前门学区; 要求 对房子要求: 不要回迁;新,不要老破小;两居,三居更好; 小学 : 崇文小学,培新小学,回...

CodeCache引发的一个问题

JVM突然变慢了?

CodeCache引发的一个问题 概要 这个文章记录了一次线上问题的查询过程, 在查询过程中, 学习CodeCache的作用. CodeCache是JIT编译生成的native code的存放空间, 他的大小很可能会影响JVM的性能. 查询问题的经过 本文是序列化工具对比的后续. 问题的完整经过是 线上部署了12个tomcat 实例. 但是经常出现的一个情况是某些tomcat...

JIT

JVM的优化编译器

# JIT Hotspot JVM运行模式 JVM有两种模式, -client 和 -server. 从JDK5开始, JVM会根据机器的不同来决定使用哪种模式. 使用 java -version可以看到具体所使用的模式 $ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (bui...

cms gc日志分析

CMS 垃圾收集器解释

CMS gc日志分析 本文适合稍微有一些jvm基础的人看 JVM内存结构 CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,也是我们线上正在使用的垃圾收集器. 介绍cms之前, 先简单介绍一下JVM的内存结构. 下面这个图不错. 画出来了所有JVM里的内存块. 如图所示...

序列化工具对比

比比比,不怕不识货就怕货比货

序列化工具对比 起因 今天早上凌晨, 机器报警. jstack之后, 发现大部分线程都在进行json反序列化. 一看代码, 发现是因为: 我们的逻辑是从缓存中取出JSON字符串, 反序列化成object. 绝大部分线程都在下面的第二个语句里. String cacheDetail = cacheInfo.queryCacheDetail(); AdapterHotelProduct a...

动态代理

深入浅出动态代理

动态代理 代理是什么? 在现实生活中,存在这样一种人—- 代理人。 举一个例子,你目前在加州,看见现在北京的房产价格很高,想卖掉手头的房。怎么办呢?只能委托给你在国内的父母进行售卖。你作为业主,需要做的事情是:签合同。 因为你不能回国,所以,你父母就替你卖房。 当然,父母比你要操心更多。譬如带买家看房,选择一个靠谱的买家,还要把钱打给你。 这个时候,父母就是你的代理。父母替你完成了...

wireshark网络分析就这么简单读书笔记

wireshark网络分析就这么简单 更新记录 v1 2016.2.28 写在前面的话 虽然我07年在计算所分析网络协议时,就用了wireshark的前身Ethereal, 但是没有想到16年的今天,还会读这个书。这个书是同事liuyue推荐我读的,很薄的一本书。两天看完。 07年做网络协议抓包分析时, 还有一个其他的选择叫CommView。 如果拿CommView和Wir...

乱序执行

乱序执行 以及 原子操作 标签(空格分隔): 技术 优化 锁 乱序 [toc] 编译器优化 为了提高执行效率, 在不影响执行结果的情况下, 编译器会任意重排代码顺序, 生成重排之后的汇编代码. cpu乱序是什么 同样为了提升执行效率, CPU也可能不按照汇编层面的顺序来执行,前提是不影响语义. 譬如 a = 1; b = 2; 以上这段代码,可能并不会按照顺序执行. ...