专门做问卷的网站,wordpress二次开发赚钱,外贸网络推广平台,贵阳微信网站制作1.Java堆溢出 Java堆用于储存对象实例#xff0c;我们只要不断地创建对象#xff0c;并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象#xff0c;那么随着对象数量的增加#xff0c;总容量触及最大堆的容量限制后就会 产生内存溢出异常。 限制Java …1.Java堆溢出 Java堆用于储存对象实例我们只要不断地创建对象并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象那么随着对象数量的增加总容量触及最大堆的容量限制后就会 产生内存溢出异常。 限制Java 堆的大小为 20MB 不可扩展将堆的最小值 -Xms 参数与最大值 -Xmx 参数设置为一样即可避免堆自动扩展通过参数-XX HeapDumpOnOutOf-MemoryError 可以让虚拟机 在出现内存溢出异常的时候Dump 出当前的内存堆转储快照以便进行事后分析。 public class HeapOOM {
static class OOMObject {
}
public static void main(String[] args) {
ListOOMObject list new ArrayListOOMObject();
while (true) {
list.add(new OOMObject());}}
} 2.虚拟机栈和本地方法栈溢出 关于虚拟机栈和本地方法栈在《Java 虚拟机规范》中描述了两种异常 1 如果线程请求的栈深度大于虚拟机所允许的最大深度将抛出 StackOverflowError 异常。 使用没有出口递归的方式超出虚拟机所允许的最大深度 public class JavaVMStackSOF {private int stackLength 1;public void stackLeak() {stackLength;stackLeak();
}
public static void main(String[] args) throws Throwable {JavaVMStackSOF oom new JavaVMStackSOF();try {oom.stackLeak();} catch (Throwable e) {System.out.println(stack length: oom.stackLength);throw e;}
} 2 如果虚拟机的栈内存允许动态扩展当扩展栈容量无法申请到足够的内存时将抛出OutOfMemoryError异常。 设置许多局部变量 为了多占局部变量表空间让栈帧申请不到内存。 public class JavaVMStackSOF {private static int stackLength 0;public static void test() {long unused1, unused2, unused3, unused4, unused5,unused6, unused7, unused8, unused9, unused10,unused11, unused12, unused13, unused14, unused15,unused16, unused17, unused18, unused19, unused20,unused21, unused22, unused23, unused24, unused25,unused26, unused27, unused28, unused29, unused30,unused31, unused32, unused33, unused34, unused35,unused36, unused37, unused38, unused39, unused40,unused41, unused42, unused43, unused44, unused45,unused46, unused47, unused48, unused49, unused50,unused51, unused52, unused53, unused54, unused55,unused56, unused57, unused58, unused59, unused60,unused61, unused62, unused63, unused64, unused65,unused66, unused67, unused68, unused69, unused70,unused71, unused72, unused73, unused74, unused75,unused76, unused77, unused78, unused79, unused80,unused81, unused82, unused83, unused84, unused85,unused86, unused87, unused88, unused89, unused90,unused91, unused92, unused93, unused94, unused95,unused96, unused97, unused98, unused99, unused100;stackLength ;test();unused1 unused2 unused3 unused4 unused5 unused6 unused7 unused8 unused9 unused10 unused11 unused12 unused13 unused14 unused15 unused16 unused17 unused18 unused19 unused20 unused21 unused22 unused23 unused24 unused25 unused26 unused27 unused28 unused29 unused30 unused31 unused32 unused33 unused34 unused35 unused36 unused37 unused38 unused39 unused40 unused41 unused42 unused43 unused44 unused45 unused46 unused47 unused48 unused49 unused50 unused51 unused52 unused53 unused54 unused55 unused56 unused57 unused58 unused59 unused60 unused61 unused62 unused63 unused64 unused65 unused66 unused67 unused68 unused69 unused70 unused71 unused72 unused73 unused74 unused75 unused76 unused77 unused78 unused79 unused80 unused81 unused82 unused83 unused84 unused85 unused86 unused87 unused88 unused89 unused90 unused91 unused92 unused93 unused94 unused95 unused96 unused97 unused98 unused99 unused100 0;}public static void main(String[] args) {try {test();}catch (Error e){System.out.println(stack length: stackLength);throw e;}}
} 无论是由于栈帧太大还是虚拟机栈容量太小当新的栈帧内存无法分配的时候 HotSpot虚拟机抛出的都是 StackOverflowError 异常。 还有一种方法是建立许多线程把内存消耗光建议不要测试卡的批爆。 public class JavaVMStackOOM {private void dontStop() {while (true) {}}public void stackLeakByThread() {while (true) {Thread thread new Thread(new Runnable() {Overridepublic void run() {dontStop();}});thread.start();}}public static void main(String[] args) throws Throwable {JavaVMStackOOM oom new JavaVMStackOOM();oom.stackLeakByThread();}} 3.方法区和运行时常量池溢出 String::intern()是一个本地方法它的作用是如果字符串常量池中已经包含一个等于此 String 对象的字符串则返回代表池中这个字符串的String 对象的引用否则会将此 String 对象包含的字符串添加到常量池中并且返回此String 对象的引用。在 JDK 6 或更早之前的 HotSpot 虚拟机中常量池都是分配在永久代中我们可以通过-XX PermSize 和 -XX MaxPermSize 限制永久代的大小即可间接限制其中常量池的容量。 public class RuntimeConstantPoolOOM {public static void main(String[] args) {
// 使用Set保持着常量池引用避免Full GC回收常量池行为SetString set new HashSetString();
// 在short范围内足以让6MB的PermSize产生OOM了short i 0;while (true) {set.add(String.valueOf(i).intern());}}
} 借助 CGLib 使得方法区出现内存溢出异常 public class JavaMethodAreaOOM {public static void main(String[] args) {while (true) {Enhancer enhancer new Enhancer();enhancer.setSuperclass(OOMObject.class);enhancer.setUseCache(false);enhancer.setCallback(new MethodInterceptor() {public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {return proxy.invokeSuper(obj, args);}});enhancer.create();}}static class OOMObject {}
} 4.本机直接内存溢出 直接内存 Direct Memory 的容量大小可通过 -XX MaxDirectMemorySize 参数来指定如果不 去指定则默认与 Java 堆最大值由 -Xmx指定一致该代码越过了DirectByteBuffer类直接通 过反射获取 Unsafe 实例进行内存分配 Unsafe 类的 getUnsafe()方法指定只有引导类加载器才会返回实例因为虽然使用DirectByteBuffer分配内存也会抛出内存溢出异常但它抛出异常时并没有真正向操作系统申请分配内存而是通过计算得知内存无法分配就会在代码里手动抛出溢出异常真正申请分配内存的方法是Unsafe::allocateMemory()。 public class DirectMemoryOOM {private static final int _1MB 1024 * 1024;public static void main(String[] args) throws Exception {Field unsafeField Unsafe.class.getDeclaredFields()[0];unsafeField.setAccessible(true);Unsafe unsafe (Unsafe) unsafeField.get(null);while (true) {unsafe.allocateMemory(_1MB);}}
}
文章转载自: http://www.morning.rlsd.cn.gov.cn.rlsd.cn http://www.morning.prprz.cn.gov.cn.prprz.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.mxptg.cn.gov.cn.mxptg.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.jydky.cn.gov.cn.jydky.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.kkjlz.cn.gov.cn.kkjlz.cn http://www.morning.wknbc.cn.gov.cn.wknbc.cn http://www.morning.sxcwc.cn.gov.cn.sxcwc.cn http://www.morning.knnc.cn.gov.cn.knnc.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn http://www.morning.whothehellami.com.gov.cn.whothehellami.com http://www.morning.mytmn.cn.gov.cn.mytmn.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn http://www.morning.jqllx.cn.gov.cn.jqllx.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.rtkz.cn.gov.cn.rtkz.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.ftzll.cn.gov.cn.ftzll.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.yckrm.cn.gov.cn.yckrm.cn http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn http://www.morning.tkcz.cn.gov.cn.tkcz.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.txlxr.cn.gov.cn.txlxr.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.qykxj.cn.gov.cn.qykxj.cn http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn http://www.morning.gnwse.com.gov.cn.gnwse.com http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.shnqh.cn.gov.cn.shnqh.cn http://www.morning.gbljq.cn.gov.cn.gbljq.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.gpcy.cn.gov.cn.gpcy.cn http://www.morning.kntsd.cn.gov.cn.kntsd.cn http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn http://www.morning.cyjjp.cn.gov.cn.cyjjp.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.qtwd.cn.gov.cn.qtwd.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.sphft.cn.gov.cn.sphft.cn http://www.morning.fslrx.cn.gov.cn.fslrx.cn http://www.morning.lwygd.cn.gov.cn.lwygd.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.fbmjw.cn.gov.cn.fbmjw.cn http://www.morning.jpfpc.cn.gov.cn.jpfpc.cn http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.pghgq.cn.gov.cn.pghgq.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.drnfc.cn.gov.cn.drnfc.cn http://www.morning.rymd.cn.gov.cn.rymd.cn http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn http://www.morning.xhfky.cn.gov.cn.xhfky.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.sqfnx.cn.gov.cn.sqfnx.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.cxryx.cn.gov.cn.cxryx.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn http://www.morning.zbpqq.cn.gov.cn.zbpqq.cn http://www.morning.hnpkr.cn.gov.cn.hnpkr.cn http://www.morning.rbtny.cn.gov.cn.rbtny.cn http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn