Java GC之常见垃圾收集器

2017年2月26日 没有评论

上一篇文章简单写了JVM的常见垃圾回收算法,今天就让我们看看根据这些算法有哪些常见的垃圾收集器,他们有什么特点,然后根据自己的应用特点和要求组合出各个年代所使用的收集器。

gccollect

上图展示了JDK1.7Update14之后的HotSpot虚拟机的7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器

1. Serial收集器

Serial收集器是最基本、发展历史最悠久的收集器,在JDK 1.3.1之前是虚拟机新生代收集的唯一选择。见名知意它是一个单线程的收集器,“单线程”的意义并不仅仅说明它[……]

Read more

分类: Java 标签: , ,

Java GC之垃圾回收算法

2017年2月19日 没有评论

上一篇文章简单写了一下JVM如何判断一个对象是否已经死了,当判断出一个对象已经死了之后,接下来就要进行垃圾回收了,所以在进行垃圾回收之前,先让我们看看垃圾回收的算法有哪些。

1. 标记-清除算法

标记清除见名知意该算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象,至于如何标记就是上一篇文章中所讲的方法了。这种算法比较简单,容易理解,同时也是一个最基础的垃圾回收算法,后面所讲的算法都是对他的改进,至于为什么需要改进,因为他主要存在两个不足:

①. 效率问题,标记和清除两个阶段的效率都不高;
②. 空间问题,标记清除之后会[……]

Read more

分类: Java 标签: ,

Java GC之对象已死吗

2017年2月11日 没有评论

差不多两年以前曾经写过一篇文章:JAVA 性能调优,其实在那篇文章中只是简单的说了,对象的分布。这篇文章继续对分布于堆中的对象的生命周期进行说明,也就是确定堆中的这些对象哪些还是“活着”的,哪些是已经“死去”(即不可能再被任何途径使用的对象)的。

1. 引用计数算法

有很多人认为判断对象是否活着的算法是这样的:给对象添加一个引用计数器,每当有一个地方引用他的时候,计数器就加1,引用失效的时候,计数器减1,当计数器的数值为0时就是不可能在被引用的对象,此时就就可以认为是已死的对象。引用计数器算法实现简单,效率也很高,是一个不错的算法,但是主流的Java虚拟机并没有采用这种算法来管理内[……]

Read more

分类: Java 标签: ,

Redis实现分布式锁

2017年1月15日 没有评论

大家都知道Redis是NoSQL的一种,目前在互联网公司中在作为缓存广泛的使用者,其实利用Redis的setnx还可以快速实现一个分布式锁,公司的业务就需要使用分布式锁保证数据的唯一性,经检索在网上发现已经有活雷锋分享了一套,本着不在重新发明轮子的想法,测试了一下好像没有问题,几乎不用对原代码进行修改,就能使用,下面就分享在这里,供需要的朋友参考。原文里面还有对实现的原理进行解释,所以本文就不再赘述,详情请通过参考资料进行访问。


package cn.bridgeli.distributedlock;

import java.util.UUID;
import java.[......]

Read more

分类: Redis 标签: ,

Spring aop应用之实现数据库读写分离

2016年12月31日 没有评论

去年五月份的时候曾经写过一篇:Spring加Mybatis实现MySQL数据库主从读写分离,实现的原理是配置了多套数据源,相应的sqlsessionfactory,transactionmanager和事务代理各配置了一套,如果从库或数据库有多个的时候,需要配置的信息会越来越多,远远不够优雅,在我们编程界有一个规范:约定优于配置。所以就用Sping的aop实现了一个简单的数据库分离方案,具体实现代码放在了Github上,地址如下:


https://github.com/bridgeli/practical-util/tree/master/src/main/java/cn/bri[......]

Read more

分类: Java 标签: , , ,

Blowfish加密算法Java版简单实现

2016年12月18日 没有评论

前几天网上突然出现流言:某东发生数据泄露12G,最终某东在一篇声明中没有否认,还算是勉强承认了吧,这件事对于一般人有什么影响、应该怎么做已经有一堆人说了,所以就不凑热闹了,咱来点对程序猿来说实际点的,说一个个人认为目前比较安全的加密算法:Blowfish。
上代码之前,先说几点Blowfish加密算法的特点:

1. 对称加密,即加密的密钥和解密的密钥是相同的;
2. 每次加密之后的结果是不同的(这也是老夫比较欣赏的一点);
3. 可逆的,和老夫之前的文章介绍的md5等摘要算法不一样,他是可逆的;
4. 速度快,加密和解密的过程基本上由ADD和XOR指令运算组成;
5. 免费,任[……]

Read more

分类: Java 标签: ,

Dubbo服务telnet调试法

2016年11月27日 没有评论

公司的RPC的服务使用的是阿里巴巴的dubbo,老夫之前曾经写过一篇如何在测试环境远程调试dubbo服务,详情请参考这篇,但一直对如何调试线上dubbo服务不得法,不得已每次都需要写一个web服务调一下看数据,前一段时间经新来的一个同事提示可以使用Telnet调试,网上搜了一下资料,发现真的很爽,以下是学习笔记。
需要说明的是:Dubbo2.0.5以上版本服务提供端口支持telnet命令,不过应该没有公司使用2.0.5以下版本吧。

1. 进入调试模式


telnet localhost 20880

即:telnet + ip + 端口,这个不用解释,使用dub[……]

Read more

分类: Java 标签: , ,

VIM常用命令

2016年11月6日 没有评论

上个周苹果公司悍然发布了新版mac,消灭了功能键,包括ESC,终于使下面这个段子成为了事实:问,如何生成一段随机数?答:让一个非开发人员退出vim。哈哈,现在开发人员是不是也可以产生随机字符串了?发现自己作为一个vim党,竟然对很多vim常用的命令都不知道,今天就记一下笔记,让自己这个vim党称呼实至名归。
首先要说明的是,基本的vim命令像A、I、O进入编辑模式,ESC进入命令模式,“:”进入末行模式,以及常用的什么dd,yy,p等都认为大家已经熟练掌握,就不说了。

1. 替换字符


:%s/oldchar/newchar/g

这个命令同样可以解决:[……]

Read more

分类: Java 标签: ,

我看拉勾一拍之系统架构

2016年10月23日 没有评论

今年年中的时候由公司平台部转组到Alpha项目中心负责公司一拍项目组的技术研发工作,到现在已经快有将近半年的时间了,随着对系统的越来越熟悉,对原有系统的架构也越来越感到有些不合理的地方,随着自己水平的提升感觉对架构也有了一点自己的理解,所以今天就借这个机会说说自己的不成熟的建议。

一. 原有的架构

俗话说,一图胜千言,直接上图:

old_architecture-225x300

解释一下这几个系统分别的作用:
1. 后台管理系统不用说了,管理C和B可见的内容;
2. C端用户系统,是对C可见的一个系统,一拍是一个招聘系统,所以就是对候选人操作的后台;
3. B端用户系统,是对B可见的一个系统,通俗点讲就是HR操[……]

Read more

分类: Java 标签: , ,

Redis 3.0入门二之集群搭建和使用

2016年9月16日 没有评论

上一篇文章讲了redis的主从搭建,主从一般只能解决我们读写分离的问题,可以增加我们的系统的负载能力,但是并不能解决单点问题,大家应该知道在互联网公司各个服务肯定不能出现单点问题,所以这一节就记录一下如果让我们的系统更加高可用。

一、集群搭建

需要先说明的是,集群搭建需要至少6个节点:3主3从(因为没有那么多机器,所以就在一台上搞了)

1. 创建文件夹redis-cluster,然后在其下面分别创建6个文件夹,存放6个实例

    mkdir -p /usr/local/redis-cluster
    mkdir 7001;mkdir 7002;mkdir 7[......]

Read more

分类: Redis 标签: , , ,