⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _1698452_mem_leak.java

📁 一个开源的组件
💻 JAVA
字号:
package org.xvolks.test.bug;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.logging.JNativeLogger.SEVERITY;
import org.xvolks.jnative.misc.MemoryStatusEx;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
import org.xvolks.jnative.util.Kernel32;
import org.xvolks.jnative.util.User32;
import org.xvolks.test.JNativeTester;

/**
 * 
 * $Id: _1698452_mem_leak.java,v 1.3 2007/05/07 17:27:54 mdenty Exp $
 * 
 * This software is released under the LGPL.
 * 
 * @author Created by Marc DENTY - (c) 2006 JNative project
 */
public class _1698452_mem_leak {
	
	private static JNative strcat;

	private static String strcat(String src1, String src2) throws NativeException, IllegalAccessException {
		if(strcat == null) {
			if(JNative.isWindows()) {
				strcat = new JNative("ntdll.dll", "strcat", false);
			} else if(JNative.isLinux()) {
				strcat = new JNative("/lib/libc.so.6", "strcat", false);
			}
			strcat.setRetVal(Type.INT);
		}
		Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(100));
		p.zeroMemory();
		p.setStringAt(0, src1);
		//System.err.println("Before strcat");
		//System.err.println("Get string from pointer p: " + p.getAsString());
		strcat.setParameter(0, p);
		strcat.setParameter(1, Type.STRING, src2);
		strcat.invoke();
		try {
			return p.getAsString();
		} finally {
			p.dispose();
		}
	}
	

	/**
	 * @param args
	 * @throws IOException 
	 * @throws IllegalAccessException 
	 * @throws NativeException 
	 */
	public static void main(String[] args) throws IOException, NativeException, IllegalAccessException {
		System.getProperties().put("jnative.debug", "true");
		System.getProperties().put("jnative.loadNative", "manual");
		JNative.getLogger().log(SEVERITY.INFO, "1698452 bug tester");
		JNativeTester.loadLib();
		System.err.println(JNative.getNativeSideVersion());
		
		JNative.setLoggingEnabled(false);
		while (true) {
			for (int i = 0; i < 100000; i++) {
				//JNative.getLogger().log(SEVERITY.INFO, "counter = "+i);
				try {
					strcat("toto", "" + i);
				} catch (NativeException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IllegalAccessException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}			
			System.gc();
//			System.out.println("Total Memory : "
//					+ Runtime.getRuntime().totalMemory());
			if(JNative.isWindows()) {
				MemoryStatusEx memStatus = Kernel32.globalMemoryStatusEx();
				System.out.println("Free Memory  : Physical = "
						+ memStatus.ullAvailPhys+ ", Virtual = " + memStatus.ullAvailVirtual);
			} else if(JNative.isLinux()) {
				BufferedReader br = new BufferedReader(new FileReader("/proc/meminfo"));
				String line;
				while((line = br.readLine()) != null) {
					if(line.toLowerCase().indexOf("free") >= 0) {
						System.out.println(line);
					}
				}
				br.close();
			}
//			try {
//				Thread.sleep(1000);
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -