木婉清发布新版
木婉清是个水木社区的客户端,去年春节时写的,之后就放着没动了。
今天春节又翻出来改吧改吧,看起来比之前好了那么一点。实现上界面改用html来写了, 规避了Android原生界面实现上的不少问题,但也出现了同样多的新问题……
未完成的功能和BUG都还有很多,等到下个春节来修复吧。
项目地址:http://code.google.com/p/muwanqing/
下载:http://muwanqing.googlecode.com/files/muwanqing.apk
木婉清是个水木社区的客户端,去年春节时写的,之后就放着没动了。
今天春节又翻出来改吧改吧,看起来比之前好了那么一点。实现上界面改用html来写了, 规避了Android原生界面实现上的不少问题,但也出现了同样多的新问题……
未完成的功能和BUG都还有很多,等到下个春节来修复吧。
项目地址:http://code.google.com/p/muwanqing/
下载:http://muwanqing.googlecode.com/files/muwanqing.apk
几台服务器的JVM占用内存总是持续增长,大大超过-Xmx设定的值,服务器物理内存几乎被耗尽。
使用jmap查看JVM的内存使用,发现jvm的堆大小完全在-Xmx参数设定的范围之内,那问题只能处在别的地方了。
JVM除了堆内存之外,就只有栈内存和DirectMemory了。栈空间每个线程是固定的,线程数也没可能多到可以占用这么多内存的程序,所以怀疑的目标就在DirectMemory上了。
DirectMemory是java nio引入的,直接以native的方式分配内存,不受jvm管理。这种方式是为了提高网络和文件IO的效率,避免多余的内存拷贝而出现的。DirectMemory占用的大小没有直接的工具或者API可以查看,不过这个在Bits类中是有两个字段存储了最大大小和已分配大小的,使用反射可以拿到这个数据:
Class<?> c = Class.forName("java.nio.Bits");
Field maxMemory = c.getDeclaredField("maxMemory");
maxMemory.setAccessible(true);
Field reservedMemory = c.getDeclaredField("reservedMemory");
reservedMemory.setAccessible(true);
Long maxMemoryValue = (Long)maxMemory.get(null);
Long reservedMemoryValue = (Long)reservedMemory.get(null);
结果证实了猜测,DirectMemory增长失控了。
原来,DirectMemory 的默认大小是64M,而JDK6之前和JDK6的某些版本的SUN JVM,存在一个BUG,在用-Xmx设定堆空间大小的时候,也设置了DirectMemory的大小。加入设置了-Xmx2048m,那么jvm最终可分配的内存大小为4G多一些,是预期的两倍。
解决方式是设置jvm参数-XX:MaxDirectMemorySize=128m,指定DirectMemory的大小。
Java中在使用Runtime.getRuntime().exec(command)调用系统命令后,一般会调用Process.waitFor()来等待命令执行结束,获取执行结果。今天一个悲剧的事实证明了,即使只是调用了很简单的脚本命令,在调用Process.waitFor()后同样可能发生无休止或者接近于无休止的阻塞。处理完故障之后痛定思痛,决定在代码中加入超时控制,但是Process.waitFor()本身并不支持超时时间设置。一个方法是改用非阻塞的Process.exitValue()方法,然后轮询检查进程状态,这种方式比较消耗CPU,以至于轮询间隔也不能设置得太小,总归不是很完美。另外就是多起一个线程,借助于其他的超时机制来控制。最后使用的代码如下:
从之前爱帮败诉于大众点评,就可以预见到一淘的后果了。
一淘想要做入口,必须得电商数量众多,实力平均才有可能;像京东之类,实力远超其他电商,本身已成为购物首选站点,又怎么会容忍一淘抢夺用户流量。
一淘的悲剧之处就在于,他所损害的,正是他所最依赖的,离开了京东、易购、当当的一淘一文不值。他比爱帮还悲剧的地方在于,爱帮是中立的第三方,而淘宝却同时身兼裁判员和运动员的角色。
总体上感觉大众点评产品的细节方面做得很粗糙。
1. Andorid客户端提示有新版本4.3.3,点开后是打开一个网页,不是直接下载升级文件,而且网页上的下载链接是4.2版本,下载安装后继续提示升级。
2. 用户可以用昵称和邮箱登录,但是用户的昵称和邮箱又都是可以随便修改。
3. 登陆后竟然有5秒钟的跳转提示页面&……
4. 修改email时,要求输入两次email确认,并且修改email后也没有邮件验证。
5. 上传设置头像没有缩放、裁剪功能。
6. 知道我在北京,默认邮件订阅优惠信息选择的城市还是上海。
Eclipse3.7版本的默认中文字体非常的小,如我这般视力良好的人都得把趴到显示器上来看才能看清,原因是其将的默认字体从Courier New改为了Consolas。
Consolas是微软最早随Vista系统发布的等宽字体,专为程序员设计,字体美观而且字形上对0和O,1和l等字符做了很好的区分,用于代码的显示确实非常漂亮。可惜的是Consolas只包含英文字体,中文字体显示仍然由宋体等显示。
解决办法是换一个字体来显示。在此推荐YaHei-Consolas字体,这个是国内Robert Lee制作的一个混合字体,使用雅黑字体显示中文,Consolas显示英文字符。雅黑作为矢量字体,在小像素、粗体、斜体上的显示都非常的好,相当的适合代码显示。
下载的字体复制到C:\Windows\Fonts就可以使用了。在eclipse选项中,展开General->Appearance->Colors and Fonts->basic,双击Test Font,然后选择字体:YaHei Consolas Hybrid即可。
附效果图一张:
《X-Men: First Class》是个好片,不过这部片子也说明了:永远不要指望美漫、及美漫改编的电影,会有“逻辑”这种东西存在。。关于这片子有几条不得不提:
1. 变形女其实是X教授的妹妹(虽然不是亲生的)!所以——她其实是和万磁王、X教授同代的人!她在试图搞兄妹恋未果之后又盯上了Beast。
2. 白皇后艾玛——虽然后来被叫做“白婊子”,但是她年轻的时候穿的还是很多,很多的;而且——她和万磁王、X教授也是同代的人!所以后来她是怎么从Jean Grey手里把镭射眼帅哥抢过来的啊!!
3. X教授年轻的时候不是秃头,并且是个不知人间疾苦、整天勾引漂亮妞的富二代!他对变形女的冷淡最终导致变形女转而跟随万磁王。
4. Beast年轻的时候是个很文弱的小伙子,他在使用了某未经测试的药剂之后变成了现在样子,然后离所当然的被变形女抛弃了——这个药剂本来是为了他和变形女开发的。
5.全篇最伟大的爱情其实是发生在万磁王和X教授之间,但是只持续了很短的时间就感情破裂分手了。所以万磁王帮助X教授造出Cerebrum是咋回事?万磁王和X教授一起去找Jean Grey又是怎么回事……
JDK7中新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个nio了),包含了众多性能和功能上的改进,其中最重要的部分,就是对异步io的支持,称为java aio(asynchronous IO)。
异步io包括文件io和socket io,其中文件异步io各主流OS都提供了原生的支持,异步socket io则并未获得所有操作系统的支持。windows的IOCP,solaris等部分unix系统,已经实现了异步IO模型;而linux的epoll,bsd的kqueue等,仍属于非阻塞多路复用io模型,读写操作是同步的。
jdk在1.4版本的nio中提供了对非阻塞多路复用同步io模型的支持,在linux上基于epoll实现,在bsd上基于kqueue实现,在Windows上则是基于select/poll实现,主要因为io模型的不同,nio无法使用IOCP来实现。jdk1.7中提供对aio的支持后,带来了两方面的好处:
1. Windows上可以使用iocp了。aio在Windows上基于iocp实现,解决了Windows上java nio由于使用较原始的select/poll导致的并发能力低下问题。
windows IOCP是在94年随着NT3.5系统发布的,在17年后java终于提供了支持,这也算是个尴尬的事情吧。如果异步io是由操作系统实现(如IOCP),可以利用硬件和驱动的异步功能,在内核态中调度线程完成数据读写,并且避免了多次内核态数据到用户态数据的拷贝操作,其性能会表现得相当优异。
在linux系统上由于aio是使用epoll来实现,其性能并不会出现提升。
2. 简化了网络变成模型。异步io相比较非阻塞多路复用模型更易理解,开发更为简单。
和多路复用的java nio相比较,可以发现,异步io是在数据读取或者写入调用已经完成的时候,再通知调用者,而非阻塞多路复用io则是在有数据就绪,可以读写的时候通知调用者,读写仍然是由调用者执行并且是阻塞的(这意味着如果要同时进行其他工作,要控制读写操作不能阻塞太长时间或者需要将其放去单独的io线程执行)。
JDK7中的java aio新增的类和接口主要有:
AsynchronousServerSocketChannel ,对应于bio中的ServerSocket和nio中的ServerSocketChannel,用于server端的网络程序。
AsynchronousSocketChannel,对云关于bio中的Socket和nio中的SocketChannel,用于client端的网络程序。
CompletionHandler,回调接口,在socket进行accept/connect/read/write等操作时,可以传入一个CompletionHandler的实现,操作执行完毕后,会调用注册的CompletionHandler。
除了CompletionHandler这种回调方式,aio中还支持返回Future对象,使用Future来设定回调操作。
LBS搞了这么多年,还是签到+同步到SNS这一套啊,
LBS同步到SNS最让人讨厌了啊,
刷屏的SNS比刷屏的话痨还要讨厌啊,
到处都是上个高速去个网吧都要LBS刷屏的人啊,
所有这些LBS刷屏的人,要全部取消关注的啊,
如果LBS死掉绝对就是刷屏把自己刷死的啊!!