使用G1垃圾收集器

作者:JerryXia | 发表于 , 阅读 (0)
2017 年 01 月 15 日jvm自Oracle JDK 7 update 4之后,JVM中引入了一种新的垃圾收集器--G1垃圾收集器(Garbage-First Collector)。之前的一篇文章,有介绍一些基本的垃圾收集器,比如比较常用的CMS垃圾收集器,但即便是CMS垃圾收集器,其也有一些不足,比如,不能很好地处理内存碎片的问题,随着应用的运行,也会导致内存使用率不高,因此通常在使用CMS垃圾收集器时,会设置相对较大的堆大小。G1垃圾收集器则旨在能够比CMS垃圾收集器更合理地管理内存,或者说更智能地管理内存。本文将介绍有关G1垃圾收集器的基本原理,以便开发人员能考虑在生产中使用之。
G1垃圾收集器介绍Garbage-First(G1)收集器是一种服务器(server)类型的垃圾收集器,针对具有大内存的多处理器机器。 大多数情况下,它能满足垃圾收集(GC)暂停时间目标,同时实现高吞吐量,这在之前的垃圾收集器中是无法满足的,从Oracle JDK 7 Update 4之后已完全支持G1垃圾回收器。G1垃圾收集器主要为有以下需求而设计:
类似于CMS垃圾收集器,GC线程可与应...阅读全文

Spring3.2 IoC容器实现

作者:JerryXia | 发表于 , 阅读 (0)
2016 年 01 月 25 日springIoC(Inversion of Control),即控制反转, 也可简单说为依赖注入(DI),旨在将对象间的依赖关系交由 外部环境去处理, 而不是由对象自己去获取,这将大大提升开发效率和降低程序复杂度,在Spring中,这个外部环境就是Spring IoC容器, 也是Spring生态的核心基础,除了Spring的IoC实现外, 其他还有诸如Guice这样的IoC实现, 本文将对Spring的IoC实现进行探讨一番。
IoC(Bean)容器的定义Spring中IoC容器(Spring Bean容器)的表现形式比较常见的是BeanFactory和ApplicationContext, 而BeanFactory作为最基础的容器抽象,其规范了一个最基本的IoC容器应该具备的功能:
public interface BeanFactory {/*** 用于区别普通Bean和FactoryBean的前缀符号,* 比如有一个叫myJndiObject的FactoryBean,* 那么需要通过&myJndiObjec将返回该Factory*/Strin...阅读全文

OutOfMemoryError的几大症状

作者:JerryXia | 发表于 , 阅读 (0)
不出意料,java.lang.OutOfMemoryError可以算是Java应用中最常见的JVM错误了,这类错误往往是Java堆没有足够的空间容纳新对象,但引起这类错误的原因还有诸多种,可能平时很少有缘分能相见,本文将探究其中几种引起该错误的场景,以备不时之需。
java.lang.OutOfMemoryError: Java heap space这应该是最常见的OutOfMemoryError错误场景,通常JVM内存会被分成堆(Heap)和永久代(Perm Gen,Java 8中已被Metaspace取代),可分别通过-Xmx和-XX:MaxPermSize来设置。而通常引起该错误的原因是,当程序正在尝试创建新对象,此时JVM堆中没有足够连续的空间容纳该对象。除此之外,程序中的一些问题也可能引起这类错误:
用户/数据量达到峰值。在业务面临峰值时,会有可能触发java.lang.OutOfMemoryError: Java heap space,但随着业务趋于平缓,这种错误也会随之消失,这通常受限于自身配置。内存泄露。由于开发人员编写程序不当,造成某些对象既没有被应用程序使用,也...阅读全文

Spring3.2 资源(Resource)管理

作者:JerryXia | 发表于 , 阅读 (0)
可以看到Resource继承自InputStreamSource,该接口定义了getInputStream()方法,用于获取资源对应的输入流对象。Spring中也提供了多种Resource实现,这可以从Resource继承树中看出:
其中有我们比较熟悉的ClasspathResource(类路径资源,Main应用程序常用),FileSystemResource(文件系统资源)等,所有Resource的实现均继承自AbstractResource,其实现了一些基本功能:
public abstract class AbstractResource implements Resource {public boolean exists() {try {// 先从文件系统查看文件是否存在return getFile().exists();} catch (IOException ex) {// Fall back to stream existence: can we open the stream?try {InputStream is = getInputStream();is.clo...阅读全文

Spring3.2 运行时环境

作者:JerryXia | 发表于 , 阅读 (0)
可以看到Environment定义了有关获取profile的方法,并且继承了PropertyResolver接口,该接口定义了从具体的属性源中解析属性的功能:
public interface PropertyResolver {/*** 检查是否有某属性*/boolean containsProperty(String key);/*** 获取某属性*/String getProperty(String key);/*** 获取某属性,不存在则返回defaultValue*/String getProperty(String key, String defaultValue);/*** 获取某属性,其值类型为T*/<T> T getProperty(String key, Class<T> targetType);/*** 获取某属性,其值类型为T,不存在则返回defaultValue*/<T> T getProperty(String key, Class<T> targetType, T defaultValue);/*** 获取某属性,并转换为对应的Class对象,失败会抛C...阅读全文