Java 内存溢出问题总结

这里总结一下在 Java 服务中,常见的 内存溢出(OutOfMemoryError)问题及解决思路。

堆溢出

报错信息:java.lang.OutOfMemoryError: Java heap space

原因

  1. 堆中(新生代和老年代)无法继续分配对象了;
  2. 某些对象的引用长期被持有没有被释放,垃圾回收器无法回收;
  3. 使用了大量的 Finalizer 对象,这些对象并不在 GC 的回收周期内。

解决方法

阅读更多

Spring测试用例自动注入Bean(下)

如果Bean的初始化是通过 xml 进行的,可以参考文章:Spring测试用例自动注入Bean(上),下面讲到的是「在没有 xml配置文件时,如何测试诸如 @Component @Service @Repository 等注解标识的类」。

待测试的类,注意该 Bean 有一个 init() 方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Service
public class DemoService {

/* 初始化逻辑*/
@PostConstruct
public void init() {
// initialization code
}

public void printName() {
System.out.println("I'm Yves");
}
}
阅读更多

CMS垃圾回收启动的时机

CMS(Concurrent-Mark-Sweep)是 Hotspot 虚拟机中目前使用最广泛的老年代垃圾回收器,在响应时间这个GC 指标上表现优异。CMS 在什么时机开始工作?触发的条件都有哪些?今天我们可以从 OpenJDK 中 CMS 这一块的实现来分析一下,该实现主要位于concurrentMarkSweepGenerationConcurrentMarkThread 这两个类中。

阅读更多

Java 9新特性尝鲜

Java 9版本于2017年9月21日发布,本文将主要介绍Java 9中引入的若干新特性。在介绍之前,还是很必要回顾一下Java 8发布的内容,毕竟Java 9中的若干新特性(例,Stream 流处理)也是在前者基础上的展开的。

Java 8特性回顾

Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。主要有:

阅读更多

点点滴滴步步为营系列4

点点滴滴步步为营系列3

点点滴滴步步为营系列2

点点滴滴步步为营系列1

锁优化的若干手段

代码层面

避免死锁

死锁出现的四要素:

  • 互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放;
  • 请求与保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放
  • 不可中条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用
  • 循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。
阅读更多

Bean的初始化顺序

[toc]

一个问题,如何让ClassB在ClassA之前被初始化?

不使用配置类

即使用 @Component@Service 等注解的Bean。

阅读更多

:D 一言句子获取中...