JVM(三)内存分配与回收策略

对象的分配的细节取决于当前使用哪一种垃圾收集器组合,以及和内存相关参数有关,本文主要讨论Serial/SerialOld收集器的内存分配和回收的策略,其他几种垃圾收集器可以自己去探讨。 先介绍下MinorGC和FullGC的概念。 新生代GC(MinorGC): 发生在新生代,Java对象大多都有朝生夕死的特性,MinorGC非常频繁,回收速度也比较快。 老年代GC(MajorGC/FullGC): 发生在老年代,出现MajorGC经常至少伴随一次的MinorGC,但非绝对。Ma ...

shell

常用Linux命令 find + xargs 将当前目录下.bak的文件,移动到临时/tmp下面 find . -name "*.bak" | xargs -I '{}' mv {} /tmp 移动到/tmp临时目录下,不要使用rm -rf 命令防止误删,其中-I '{}'标识占位符 awk 分隔字符串,排序 grep charles /home/zhangcheng.log | awk '&#123 ...

shell

常用Git命令 git log 详细说明可查看 链接 git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ git rebase git reset git merge git fetch

JavaSPI(二)ServiceLoader深入解析

SPI(Service Provider Interface) ,是JDK内置的一种服务提供发现机制,说到JavaSPI的服务提供发现机制,就必须要了解ServiceLoader的原理。在ServiceLoader使用到Thread.currentThread().getContextClassLoader(),线程上下文类加载器来加载发现的服务类。 1、线程上下文类加载器 ContextClassLoader是从JDK1.2开始引入的。类java.lang.Thread 中的方法g ...

JavaSPI(一)基础实例

我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。 为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计 ...

Java注解(三)编译时注解

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。 在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译。 在JDK6中,将注解处理器这一功能进行了规范化,形成了java.annotation.processing的API包,Mirror API则进行封装,形成javax.lang.model包。注解处理器的开发进行了简化,不再单独使用apt工具,而将此功能集成到了javac命令中。 1、定义注解 @Target(Element ...

Java注解(二)运行时注解

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用,读取注解的工具叫作注解处理器。 Java提供了两种方式来处理注解: 第一种是利用运行时反射机制; 另一种是使用Java提供的API来处理编译期的注解。 本文章主要讲解使用反射机制方式的注解处理器,仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解。 下面结合例子来说明这种方式的处理方法。 Java中的反射API(如java.lang.Class ...

Java注解(一)注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式。注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样。那么,注解到底可以做什么呢? 1、注解的作用 提供用来完整地描述程序所需要的信息,如编译期校验程序信息。 生成描述符文件,或生成新类的定义。 减轻编写“样板”代码(配置文件)的负担,可以使用注解自动生成。 更加干净易读的代码。 编译期类型检查。 2、Java提供的标 ...

Java锁(五)CyclicBarrier分析

CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。 1、CyclicBarrier使用实例 ...

OpenJDK8构建

1.环境介绍 OpenJDK代码: http://hg.openjdk.java.net/jdk8u/jdk8u 2.JDK安装 这里安装的是构建OpenJDK需要依赖的JDK, 一般是当前构建版本的上一个版本, 比如我们这里需要安装JDK7,已经安装的可以略过这一步。 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-in ...