java |

动态获取泛型的类型

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

Kevin Lim
数据结构 |

数据结构--堆

堆的概念 堆首先是一个完全二叉树,我们先看一下完全二叉树的定义 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 再看看堆的定义(二叉堆) 1.父节点的值总是大于(小于)或等于每一个子节点的值2.每个结点的左子树和右子树也是一个堆 根据堆是一个二叉树,我们可以得出一些特性,假设当前结点在数组中的下标为i 一个结点的左儿子数据所在的下标为(i+1)*2-1 一个结点的右 ...

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