文档章节

out of memory 测试用例

Original123
 Original123
发布于 2017/03/29 10:20
字数 425
阅读 8
收藏 0

在JVM内存中除了程序计数器以外,其他内存区域都可以发生outofmemory异常,

  • 堆异常

        

/************
	 * java 堆测试
	 * 
	 * -Xms256k -Xmx256k
	 */
	@Test
	public void heapTest() {
		try {
			List<Object> list = new ArrayList<Object>();

			while (true) {
				list.add(new Object());
			}
		} catch (Throwable throwable) {
			throwable.printStackTrace();
		}

	}

 

发生异常信息如下:

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at com.chenkang.OomTest.heapTest(OomTest.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

 

  • 方法区异常

    

/************
	 * 方法区测试 JVM 参数配置 :-XX:PermSize=4M -XX:MaxPermSize=4M
	 */
	@Test
	public void methodAreaTest() {
		while (true) {
			Enhancer enhancer = new Enhancer();
			enhancer.setSuperclass(OOMObject.class);
			enhancer.setUseCache(false);
			enhancer.setCallback(new MethodInterceptor() {

				@Override
				public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
					return proxy.invokeSuper(obj, args);
				}
			});
			enhancer.create();
		}
	}

 

 

  • 运行时常量池

     /************
	 * 方法区测试 JVM 参数配置 :-XX:PermSize=1M -XX:MaxPermSize=1M
	 */
	@Test
	public void methodAreaTest() {
		// 使用List保持着常量池引用,压制Full GC回收常量池行为

		try {
			List<String> list = new ArrayList<String>();
			// 10M的PermSize在integer范围内足够产生OOM了
			int i = 0;
			while (true) {
				list.add(String.valueOf(i++).intern());
			}
		} catch (Throwable throwable) {
			throwable.printStackTrace();
		}

	}
java.lang.OutOfMemoryError: Java heap space
	at java.lang.Integer.toString(Unknown Source)
	at java.lang.String.valueOf(Unknown Source)
	at com.chenkang.OomTest.constantPoolTest(OomTest.java:70)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=4M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4M; support was removed in 8.0

 

  • 虚拟机栈
  • 本地方法栈

一个java虚拟机的整体设置如下:

 

 

 

 

 

 

 

 

© 著作权归作者所有

下一篇: HTTP协议详解
Original123
粉丝 7
博文 66
码字总数 87205
作品 0
徐汇
架构师
私信 提问
在PHP中使用Mockery进行测试驱动开发(TDD) - 上

测试驱动开发网上也谈了很多了,PHP方面的文章也有一些,在百度和Google里搜,好像没有看到几篇谈用Mock(伪装对象)的技术的,这里写篇文章讲讲。 先过一下测试驱动开发的基本理念:就是先写...

Michaelyn
2015/05/29
271
0
Endeavour 1.24 发布,软件生命周期管理

Endeavour 是一个功能丰富基于Web的软件项目管理工具,适合用来管理大规模的迭代和增量企业系统软件项目,主要功能包括:用例管理、迭代开发、项目计划、需求变更管理、缺陷跟踪、测试用例、...

红薯
2011/02/28
1K
0
Java设计模式之单例模式代码讲解

单例模式大家也许都不陌生,毕竟我们用的也比较的频繁,今天的这篇博客主要是想要弄清楚单例模式的几种写法以及单例模式的线程安全问题。 废话不多说,直接看代码: 1 饿汉模式: /*** @auth...

设计模式
2017/12/19
0
0
在 AWS 上比较 Nginx 和 Apache 的性能 —— Nginx 并不总是赢家!

这是另外一个 Nginx 和 Apache 的比较?是的,但你应该继续读下去,因为该比较测试是在 AWS 云平台上进行的,使用了所有适合此次测试的各种资源,包括:ELB, EC2, EBS, RDS 和 ElastiCache。...

红薯
2013/02/27
5.4K
7
Firebug 1.8a2 发布

getfirebug.com 刚刚发布了 Firebug 1.8a2 + Chromebug 1.8a2 (兼容 Firefox 5 – Aurora) 该版本修复了 25 issues 通过了所有的测试用例 新特性: Contents of the command line and comma......

红薯
2011/04/22
744
4

没有更多内容

加载失败,请刷新页面

加载更多

Java FOR-EACH循环

FOR-EACH循环使得代码更加的简短,也让代码更加易懂,其实他并没有加入什么新的功能。他的功能完全可以用简单的FOR循环代替。 for-each的用法: int a[] = {1,2,3,4,5,6} for(int s:a){ Syst...

无名氏的程序员
10分钟前
2
0
使用HTML5的History API

本文转载于:专业的前端网站➣使用HTML5的History API   HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL。这个功能很有用,例如通过一段JavaScript代...

前端老手
12分钟前
2
0
JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
54分钟前
7
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
今天
98
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部