注:文章首发于InfoQ,http://www.infoq.com/cn/articles/jvm-bug-thread

JVM线程dump Bug描述

  在JAVA语言中,当同步块(Synchronized)被多个线程并发访问时,JVM中会采用基于互斥实现的重量级锁。JVM最多只允许一个线程持有这把锁,如果其它线程想要获得这把锁就必须处于等待状态,也就是说在同步块被并发访问时,最多只会有一个处于RUNNABLE状态的线程持有某把锁,而另外的线程因为竞争不到这把锁而都处于BLOCKED状态。然而有些时候我们会发现处于BLOCKED状态的线程,它的最上面那一帧在打印其正在等待的锁对象时,居然也会出现-locked的信息,这个信息和持有该锁的线程打印出来的结果是一样的(请看下图),但是对比其他BLOCKED态的线程却并没有都出现这种情况。当我们再次dump线程时又可能出现不一样的结果。测试表明这可能是一个偶发的情况,本文就是针对这种情况对JVM内部的实现做了一个研究以寻找其根源。

Read on →

  JAVA调试我想大家都玩过,或许因为非常完美地集成到了我们日常的IDE里,比如eclipse,netbeans,可是大家有没有想过它是怎么实现的呢,接下来我会从vm中打印的调试日志来跟大家认识下这个调试体系。

Read on →

问题描述

  当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是我们第一次调用java.sql.DriverManager.registerDriver注册一个驱动实例要走的逻辑(jdk1.6下),不过这篇文章是使用我们生产环境的一个系统的线程dump和内存dump为基础进行分析展开的。

Read on →

  最近通过@RednaxelaFX的一篇文章得知了HSDB,并好好研究了一下用法,对学习jvm的人来说绝对是一个利器,可以摆脱GDB,直接图形化看内存结构布局,具体的用法我就不多说了,这篇文章介绍得很详细了,这次写文章主要是想通过这一利器来分析下String的值在java里的内存情况,不同场景下的String的值到底是在内存里的哪块区域,这里强调的是值,并不是对象,因为对象我们都知道是存在heap里的,我们看java.lang.String的源码会看到有一个value数组,这里才是真正的值,本文顺带也是hsdb用法的一个介绍,如此利器希望给大家带来不一样的乐趣。

Read on →

Attach是什么

  在讲这个之前,我们先来点大家都知道的东西,当我们感觉线程一直卡在某个地方,想知道卡在哪里,首先想到的是进行线程dump,而常用的命令是jstack ,我们就可以看到如下线程栈了

Read on →
tcp

  以前我们经常会碰到Broken pipe或者Connection reset by peer之类的异常,但是tcp实现里什么情况下会抛出这些异常呢,以前我给对方的回答都是模棱两可的,自己说实话都没把握,因为自己也没有验证过,对它们的认识都是从网上看来的,正确与否也不知道,昨天独明突然又问到这个问题,前段时间正好对tcp这块研究了一段时间,有了点理论知识之后再从实践角度对此问题进行一下分析,下面对我这次的调研过程进行下描述与大家分享,希望大家以后对此类问题都能很自信地应答。

三次握手和四次挥手过程

  在讲具体的原因之前,我们有必要补充下tcp这块的一些基础知识,我们都知道tcp通信有三次握手和四次挥手,网上介绍的文章也一大堆,图我也懒得画了,直接网上找一个图给大家

Read on →

  在pcduino上搭建站点,有两个问题首先需要解决

  • 域名绑定
  • 端口映射

  如果你的pcduino连的路由器的IP已经是公网IP,按照如下步骤查看

  • 打开路由器管理页面,比如192.168.1.1,查看运行状态里WAN显示的IP地址
  • 打开www.ip138.com,上面会显示你的公网IP
  • 如果以上两者相等,说明你的路由器就是直接连的公网,否则外面可能还有一层或者几层路由器,这个就比较麻烦了,你必须要有操作他们的权限才能继续往下走
Read on →

    今天又做了一个尝试,从wordpress换到了octopress,放弃了pcduino,选择了免费的github。
  • octopress界面的清爽简洁
  • octopress对markdown语法的天然支持
    • 虽然wordpress也有markdown的插件,但是还是喜欢正统
    • 公司周报都用markdown写了,主要是排版非常舒服
  • octopress有程序员的思维,用官方话说“Octopress is a blogging framework for hackers”
  • pcduino
    • 于己写文章/发布都比较蛋疼,毕竟是一块价值仅300多的开发板,性能有限,有时间真的会影响写文章的心情
    • 于人访问速度犹如龟速,甚至有时候还经常打不开,实在对不住看客们
    • 域名访问不稳定,主要还是自己不想成为域名代理服务商付费用户,只得路由器上做端口映射,路由器重启域名还会重新指定A记录,实在是屌丝至极
  • 转向github,大势所趋,公司内部都慢慢放弃svn,投入github托管,自己目前开发的项目也使用git,之前记得微博上有人招聘,提了几个要求,如果你连github账户都没一个,请不要投简历给我,可见github的未来非常美好啊
    • 主要还是免费的,哈哈, 访问速度还可以,虽然偶尔会被墙一下,不过貌似问题不大
    • 还支持域名绑定

之前的部分博文请访问支付宝中间件官方博客