java |

动态获取泛型的类型

java泛型的概念实际上java中泛型的实现只是一个语法糖,在编译的时候会起作用,帮我们做一些校验,比如String类型的List是否添加了Integer类型的对象。而该校验在编译后会被“擦除”,所以你可以在运行期间跳过泛型检测(例如反射),我们可以实验证实一下。 先写个简单使用泛型的例子: import java.util.List; import java.util.ArrayList; public class TestGeneric { public ...

Kevin Lim
java |

JVM再探-垃圾收集器和内存分配策略

java程序内存的分配和释放都是由JVM进行管理的,新建一个对象等分配了一定的内存后,当对象不再被引用时,就需要释放对应的内存,这些都统一归JVM管理,对于JVM的内存释放我们称之为垃圾回收. 垃圾收集器算法JVM垃圾收集算法简单分为3类,标记-清除算法,复制算法以及标记-整理算法. 标记-清除算法标记内存中不再被引用的对象,然后在标记完成后进行统一回收.不足:一是效率问题,标记和清除的过程都需要花费一定时间;二是标记清除后产生大量不连续的内存碎片,当大的对象生成时需要 ...

Kevin Lim
java |

JVM初探-内存区域划分

最近写的爬虫抓取某写网站数据时,发现程序有出现OutOfMemory异常..记得以前面试的时候面试官问有没有遇到过OOM,我都不懂对方问的是啥..好了,扯点废话,接下来开始学习一下JVM相关的知识,以便于今后遇到OOM问题知道如何解决. 内存区域划分程序计数器可以看做是一小块内存区域用于存放当前线程所执行的字节码到什么位置了,我们都知道不同线程执行有个CPU轮询分配时间片的过程,假设是单核CPU,线程A执行到三分之一的位置,CPU由于执行线程B,线程A需要暂停执行.这时就 ...

Kevin Lim
java |

GeoHash的简单使用例子

以前开发一个项目有这样一个需求,货主找附件的车,原来是通过使经纬度进行匹配的,因为经纬度是2个字段,所以匹配起来性能比较低,有一个geohash算法可以将二维的经纬度匹配转为一维的匹配,降低查询效率.详细了解请参见相关博文 背景网上百度的geohash java版的代码发现计算并不准确于是去maven库查询了一下发现有对应的jar包,而且写的比较详细。对应pom文件 <dependency> <groupId>ch.hsr</groupId& ...

Kevin Lim
java |

java设计模式之singleton

最近在看2年前买的effective java,说起来也是挺惭愧的,希望这次能静下心来 什么是singletonsingleton即我们经常说的单例模式,所谓单例就是只有一个实例,指仅仅被实例化一次的类。通常被用来代表那些本质上唯一的系统组件,比如窗口管理器或者文件系统。最近在学redis,就把产生jedis的pool写成一个单例模式。package utils; import redis.clients.jedis.JedisPool; import redis.clie ...

Kevin Lim