手動寫java記憶體溢位 java.lang.OutOfMemoryError: PermGen space

hcmony發表於2018-09-04
注意:執行時的引數 -Xms10m -Xmx10m -XX:PermSize=1m -XX:MaxPermSize=2m
package com.hcmony.test.memory;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;

/**
 * <h3>Shenjue.java基本描述</h3>
 * <p>
 *    java.lang.OutOfMemoryError:PermGenspace:這種是P區記憶體不夠,可通過調整JVM的配置:
 *  
 *  【注】執行時的引數 -Xms10m -Xmx10m -XX:PermSize=1m -XX:MaxPermSize=2m
 *
 *  JVM的Perm區主要用於存放Class和Meta資訊的,Class在被Loader時就會被放到PermGenspace,
 * 這個區域成為年老代,GC在主程式執行期間不會對年老區進行清理,預設是64M大小,
 * 當程式需要載入的物件比較多時,超過64M就會報這部分記憶體溢位了,需要加大記憶體分配,一般128m足夠。
 *
 *
 *
 * </p>
 *
 * @author hcmony
 * @since V1.0.0, 2018/09/04 17:20
 */
public class PermGenSpace {
	public static void main(String[] args) {
		URL url = null;
		List<ClassLoader> classLoaderList = new ArrayList<ClassLoader>();
		try {
			url = new File("D:\\tmp").toURI().toURL();
			URL[] urls = {url};
			while (true){
				ClassLoader loader = new URLClassLoader(urls);
				classLoaderList.add(loader);
				loader.loadClass("com.hcmony.test.memory.User");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

相關文章