知识大全 内存溢出场景模拟

Posted 常量

篇首语:阳光照亮世界,知识照亮人生。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 内存溢出场景模拟相关的知识,希望对你有一定的参考价值。

   Java Method Stack 栈溢出实验什么时候会让 Java Method Stack 栈溢出啊?栈的基本特点就是 FILO(First In Last Out) 如果 in 的太多而 out 的太少 就好 overflow 了 而 Java Method Stack 的功能就是保存每一次函数调用时的 现场 即为入栈 函数返回就对应着出栈 所以函数调用的深度越大 栈就变得越大 足够大的时候就会溢出 所以模拟 Java Method Stack 溢出 只要不断递归调用某一函数就可以

  程序源码

  // Author   Poechant // Blog     /poechant // Email    zhognchao ustc# (# >@)

  // Args     verbose gc Xss K

  package sinosuperman main

  public class Test

  private int stackLength =

  public void stackOverflow() ++stackLength stackOverflow()

  public static void main(String[] args) throws Throwable Test test = new Test()

  try test stackOverflow() catch (Throwable e) System out println( stack length + test stackLength) throw e 运行结果

  stack length Exception in thread main java lang StackOverflowError at sinosuperman main Test stackOverflow(Test java )

  at sinosuperman main Test stackOverflow(Test java )

  ……

   Java Method Stack 内存溢出实验Heap 内存溢出

  堆是用来存储对象的 当然对象不一定都存在堆里(由于逃逸技术的发展) 那么堆如果溢出了 一定是不能被杀掉的对象太多了 模拟 Heap 内存溢出 只要不断创建对象并保持有引用存在即可

  程序源码

  // Author   Poechant // Blog     /poechant // Email    zhongchao ustc# (# >@)

  // Args     verbose gc Xmx m Xms m

  package sinosuperman main

  import java util ArrayList import java util List

  public class Test

  private static class HeapOomObject

  public static void main(String[] args) List<HeapOomObject> list = new ArrayList<HeapOomObject>() while (true) list add(new HeapOomObject()) 运行结果

  [GC K > K( K) secs] [GC K > K( K) secs] [GC K( K) secs] [Full GC K > K( K) secs] [Full GC K > K( K) secs] [GC K( K) secs] [Full GC K > K( K) secs] [Full GC K > K( K) secs] [Full GC K > K( K) secs] [GC K( K) secs] [Full GC K > K( K) secs] [Full GC K > K( K) secs] [Full GC K > K( K) secs] Exception in thread main java lang OutOfMemoryError Java heap space at sinosuperman main Test main(Test java )

   Method Area 内存溢出也就是 Non heap 是用来存储 Object Class Data 常量 静态变量 JIT 编译后的代码等 如果该区域溢出 则说明某种数据创建的实在是太多了 模拟的话 可以不断创建新的 class 直到溢出为止

  以下代码使用到 cglib jar 和 asm all jar

  程序源码

  package sinosuperman main

  import java lang reflect Method

  import net sf cglib proxy Enhancer import net sf cglib proxy MethodInterceptor import net sf cglib proxy MethodProxy

  public class Test static class MethodAreaOomObject public static void main(String[] args) while(true) Enhancer enhancer = new Enhancer() enhancer setSuperclass(MethodAreaOomObject class) enhancer setUseCache(false) enhancer setCallback(new MethodInterceptor() public Object intercept(Object obj Method method Object[] args MethodProxy proxy) throws Throwable return proxy invoke(obj args) ) enhancer create() 运行结果

  Exception in thread main re CodeGenerationException    java lang reflect InvocationTargetException——>null at re AbstractClassGenerator create(AbstractClassGenerator java )

  at net sf cglib proxy Enhancer createHelper(Enhancer java )

  at net sf cglib proxy Enhancer create(Enhancer java )

  at sinosuperman main Test main(Test java )

  Caused by java lang reflect InvocationTargetException at sun reflect GeneratedMethodAccessor invoke(Unknown Source)

  at sun reflect DelegatingMethodAccessorImpl invoke(DelegatingMethodAccessorImpl java )

  at java lang reflect Method invoke(Method java )

  at re ReflectUtils defineClass(ReflectUtils java )

  at re AbstractClassGenerator create(AbstractClassGenerator java )

  …… more Caused by java lang OutOfMemoryError PermGen space at java lang ClassLoader defineClass (Native Method)

  at java lang ClassLoader defineClassCond(ClassLoader java )

  at java lang ClassLoader defineClass(ClassLoader java )

  …… more Runtime Constant Pool in Method Area 内存溢出在运行时产生大量常量就可以实现让 Method Area 溢出的目的 运行是常量可以用 String 类的 intern 方法 不断地产生新的常量

  程序源码

  package sinosuperman main

  import java util ArrayList import java util List

  public class Test public static void main(String[] args) List<String> list = new ArrayList<String>() int i = while (true) list add(String valueOf(i++) intern()) 运行结果

  Exception in thread main java lang OutOfMemoryError PermGen space at java lang String intern(Native Method)

  at sinosuperman main Test main(Test java )

cha138/Article/program/Java/hx/201311/26375

相关参考

知识大全 关于PHP内存溢出问题的解决方法

关于PHP内存溢出问题的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一.内存溢出解决

知识大全 探究两大Java内存溢出类型

探究两大Java内存溢出类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你知道如何解决Jav

知识大全 巧解Tomcat中JVM内存溢出问题

巧解Tomcat中JVM内存溢出问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你对Tomc

知识大全 Tomcat运行Java Web内存溢出总结

Tomcat运行JavaWeb内存溢出总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 java开发中常常遇到的内存溢出问题 OutOfMemory

java开发中常常遇到的内存溢出问题OutOfMemory  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 JVM内存溢出的两大类型及解决方案

JVM内存溢出的两大类型及解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你知道如何解决

知识大全 数据结构考研分类复习真题 第三章 栈和队列[10]

  .两个栈共享一片连续内存空间时为提高内存利用率减少溢出机会应把两个栈的栈底分别设在这片内存空间的两端(   )【上海海运学院一(分)】  即使对不含相同元素的同一输入

知识大全 文字溢出实现溢出的部分再放入一个新生成的div

cha138/Article/program/Java/JSP/201311/19956

知识大全 形容分离时场景的词语

形容分离时场景的词语形容分离时场景三叠阳关解释:〖解释〗即《阳关三叠》。琴曲。琴谱以唐王维《送元二使安西》诗为主要歌词,并引申诗意,增添词句,抒写离别之情。的词语形容分离的词语生死离别【解释】指不易再

知识大全 曼谷适合孩子玩的地方有哪里

曼谷适合孩子玩的地方有哪里想要去曼谷找个好玩儿的地方,那就一定要去泰国恐龙星球乐园,那里有模拟恐龙对战场景,在恐龙牧场还能骑假恐龙,现在去官方微博上,还能领取优惠代码门票享受七折优惠,再加上免费乘坐摩