我的Netty项目-优化响应头的Date

发现设置响应头的CPU时间长

dateformat

发现别的都是赋值语句,应该没问题。 那么锁定到下面这句话
headers.set(HttpHeaderConstants.DATE, DATE_FORMAT_GMT_LOCAL.get().format(new Date()));

这个日期应该会生成相对多的小对象和一些计算。相比这个方法中的其他赋值语句来说。 其实它1秒生成一次就行,于是改成如下.

  private static final FastThreadLocal<DateFormat> DATE_FORMAT_GMT_LOCAL = new FastThreadLocal<DateFormat>() {
        private TimeZone timeZone = TimeZone.getTimeZone("GMT");
        @Override
        protected DateFormat initialValue() {
            DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss z", Locale.ENGLISH);
            df.setTimeZone(timeZone);
            return df;
        }
    };
    private static long lastTimestamp;
    private static String nowRFCTime;

    public static String getDateByRfcHttp(){
        long timestamp = System.currentTimeMillis();
        if(timestamp - lastTimestamp > 1000){
            lastTimestamp = timestamp;
            nowRFCTime = DATE_FORMAT_GMT_LOCAL.get().format(new Date(timestamp));
            System.out.println("cacheCount="+cache);
            System.out.println(nowRFCTime);
            cache= 0;
        }else {
            cache++;
        }
        return nowRFCTime;
    }
    public static void main(String[] args) {
        while (true){
            getDateByRfcHttp();
        }
    }

效果如下

Sat, 07-Dec-2019 16:36:14 GMT
cacheCount=209380959次
Sat, 07-Dec-2019 16:36:15 GMT
cacheCount=208618483次
Sat, 07-Dec-2019 16:36:16 GMT
cacheCount=236709287次
Sat, 07-Dec-2019 16:36:17 GMT
cacheCount=234956261次
Sat, 07-Dec-2019 16:36:18 GMT
cacheCount=86650219次
Sat, 07-Dec-2019 16:36:19 GMT
cacheCount=73971423次
Sat, 07-Dec-2019 16:36:20 GMT
cacheCount=201444191次
Sat, 07-Dec-2019 16:36:21 GMT
cacheCount=235206764次
Sat, 07-Dec-2019 16:36:22 GMT
cacheCount=236035989次
Sat, 07-Dec-2019 16:36:23 GMT

改完后,JMeter测试吞吐量从12900+/s 变成了13650+/s

datetimeafter

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

备案信息公示
京ICP备18003381号
京ICP备18003381号-1