package hamaster.gradesgin.util; import java.math.BigInteger; import java.security.SecureRandom; import java.util.Random; /** * 安全清理内存的工具类 * @author <a href="mailto:wangyeee@gmail.com">Wang Ye</a> */ final public class MemoryUtil { /** * 在新的线程中安全擦除内存块,这个方法在执行后会快速返回<br> * 此方法与在新线程中执行immediateSecureBuffers方法等效 * @param buffers 待擦除的内存块 */ public final static void fastSecureBuffers(byte[] ... buffers) { new SecureBufferThread(buffers).start(); } /** * 立刻安全擦除内存块 * @param buffers 待擦除的内存块 */ public final static void immediateSecureBuffers(byte[] ... buffers) { BigInteger i = new BigInteger(Long.toHexString(System.nanoTime()), 16); Random random = new SecureRandom(i.toByteArray()); for (byte[] buffer : buffers) { if (buffer != null) random.nextBytes(buffer); } } } final class SecureBufferThread extends Thread { private byte[][] buffers; public SecureBufferThread(byte[] ... buffers) { this.buffers = buffers; } @Override public void run() { MemoryUtil.immediateSecureBuffers(this.buffers); } }