首页 > 应用开发 > Java > 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
import java.text.SimpleDateFormat;import java.util.Date;import org.apache.log4j.Logger; public class HelloWorld { private static Logger LOGGER = Logger.getLogger(HelloWorld.class.getName()); public void sayHello(String message) { SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.YYYY"); String today = formatter.format(new Date()); LOGGER.info(today + ": " + message); }}
Exception in thread “main”: java.lang.OutOfMemoryError: Java heap space
Exception in thread “main”: java.lang.OutOfMemoryError: PermGen space
Exception in thread “main”: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Exception in thread “main”: java.lang.OutOfMemoryError: request bytes for . Out of swap space?
Exception in thread “main”: java.lang.OutOfMemoryError: (Native method)
1 public class StringOomMock { 2 static String base = "string"; 3 4 public static void main(String[] args) { 5 List list = new ArrayList(); 6 for (int i=0;i< Integer.MAX_VALUE;i++){ 7 String str = base + base; 8 base = str; 9 list.add(str.intern()); 10 } 11 } 12 }
1 package jdk8; 2 3 import java.io.File; 4 import java.lang.management.ClassLoadingMXBean; 5 import java.lang.management.ManagementFactory; 6 import java.net.URL; 7 import java.net.URLClassLoader; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 /** 12 * 13 * @ClassName:OOMTest 14 * @Description:模拟类加载溢出(元空间oom) 15 * @author diandian.zhang 16 * @date 2017年4月27日上午9:45:40 17 */ 18 public class OOMTest { 19 public static void main(String[] args) { 20 try { 21 //准备url 22 URL url = new File("D:/58workplace/11study/src/main/java/jdk8").toURI().toURL(); 23 URL[] urls = {url}; 24 //获取有关类型加载的JMX接口 25 ClassLoadingMXBean loadingBean = ManagementFactory.getClassLoadingMXBean(); 26 //用于缓存类加载器 27 List classLoaders = new ArrayList(); 28 while (true) { 29 //加载类型并缓存类加载器实例 30 ClassLoader classLoader = new URLClassLoader(urls); 31 classLoaders.add(classLoader); 32 classLoader.loadClass("ClassA"); 33 //显示数量信息(共加载过的类型数目,当前还有效的类型数目,已经被卸载的类型数目) 34 System.out.println("total: " + loadingBean.getTotalLoadedClassCount()); 35 System.out.println("active: " + loadingBean.getLoadedClassCount()); 36 System.out.println("unloaded: " + loadingBean.getUnloadedClassCount()); 37 } 38 } catch (Exception e) { 39 e.printStackTrace(); 40 } 41 } 42 }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69951287/viewspace-2664023/ ,如需转载,请注明出处,否则将追究法律责任。
注册时间:2019-10-19