Netty5值得关注的变化

Netty5版本不像Netty3到Netty4的变化那么巨大。

核心变化

<1> 简化了handler类型分级结构
合并ChannelInboundHandler与ChannelOutboundHandler到ChannelHandler。ChannelHandler现在具有inbound与outbound的方法。
废弃了ChannelInboundHandlerAdapter,ChannelOutboundHandlerAdapter和ChannelDu[......]

Read more

Posted in 译文 | Leave a comment

Jedis Sharding实现

随着业务的发展,当Redis单实例无法满足需求时,无可避免的要采用Redis集群方案。

目前普遍采用的Redis集群方案有:

  • 客户端做Sharding;
  • twenproxy;
  • redis cluster

Jedis sharding实现逻辑:https://github.com/jjmatrix/doraemon/tree/v2.1.0/doraemon-cache/src/main/java/org/jmatrix/cache/redis

 

如果未说[......]

Read more

Posted in Redis | Leave a comment

Junit4:参数化测试

(注意,我要用官方文档开始刷存在感了…)

Junit通过自定义runner——Parameterized来实现参数化测试,参数化测试主要用于需要重复测试不同条件的场景,举个栗子:

public class Fibonacci {
    public static int compute(int n) {
        int result = 0;

        if (n <= 1) {
            result = n;
        }[......]

Read more

Posted in 译文 | Tagged | Leave a comment

Java那点事——异步

在JDK1.6提供了Future,FutureTask,ExecutorService等用于支持异步编程,但是Future,FutureTask没有提供callback机制,只能主动轮询,通过get去获取结果。

 

Guava的ListenableFuture对此做了扩展,支持callback机制。

 

就callback机制的扩展而言,也并不复杂。看看ListenableFuture与ListenableFutureTask:
public inter[......]

Read more

Posted in Java | Leave a comment

Tomcat源码走读——session管理(续)

2. session创建、过时处理等

public Session createSession(String sessionId ) {

        if ((maxActiveSessions &gt;= 0) &amp;&amp;
                (getActiveSessions() &gt;= maxActiveSessions)) {
            rejectedSessions++;[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Tomcat扩展——监控

最近心血来潮,想是否可以通过增加一个tomcat的扩展,来持续收集tomcat服务器本身的性能信息,如线程池的各项数据,请求数等等,这样可以配合业务方面的监控,可以更方便的分析调整tomcat配置,以提供更好的服务。

 

这样也不需要每次通过连接jmx去观察数据,而且idc环境要开启jmx,还得涉及各种安全问题…….

 

Tomcat manager中StatusManagerServlet就是通过JMX提供了Tomcat服务的当前状态信息。我[......]

Read more

Posted in J2EE, 读书笔记 | Tagged | Leave a comment

为什么Null是不好的

原文出自:http://www.javacodegeeks.com/2014/09/why-null-is-bad.html,有兴趣可以去细看,里面详细说明了Null不好的原因。

 

这里只提其中的结论及简单的原因,为什么Null是不好的?作者认为,如果是函数返回null的情况,这造成了函数功能的模糊,使用者无法清楚的知道什么情况下返回null。

 

而对于可能返回null的函数的使用者,则必须包含专门的异常处理代码,如:

Employee empl[......]

Read more

Posted in Java | Tagged | Leave a comment

disruptor导致cpu占用率高

这次心血来潮在项目中使用了disruptor来做数据的更新的,虽然现阶段还没必要,但考虑到后面做大规模数据处理的时候要用,就先杀鸡用“牛刀”了。

 

测试阶段没发现有问题,但后来发布了有人反馈机器CPU飙升。因此去定位了一下,top,jstack… 之后发现占用CPU的线程跟disruptor有关,考虑到刚发布不可能是因为数据量太大,相反应该是因为太小。 就想到应该是自己使用了不合适的wait strategy。

 

看了下配置,用的yield的等[......]

Read more

Posted in Java | Tagged | Leave a comment

druid:保存监控记录

druid的datasource会记录下关于连接池各种信息,包括活动连接、已关闭连接、历史连接数,连接池的总连接数等等,同时支持将这些监控信息保存下来。

 

这个功能通过datasource的DruidDataSourceStatLogger实例statLogger来支持,DruidDataSource初始化的时候会创建一个LogStatsThread线程,这个线程每隔一定的时间就会将监控信息保存到特定位置,具体保存到哪里由statLogger决定,当然,如果需要我们可以自[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Java中10个最简单的性能优化技术

只是简单提下这十条规则,加简单的翻译,加一些自己的扯淡,想要看完整的内容到Java Code Geeks: http://www.javacodegeeks.com/2015/02/top-10-easy-performance-optimisations-java.html

 

1. 使用StringBuilder

字符串连接尽量使用StringBuilder,而不是直接使用“+”,你可能会说JVM就是使用StringBuilder实现的“+”操作,但是,毕竟JVM[......]

Read more

Posted in 译文 | Tagged | Leave a comment
« Older