Почему первый вызов шифрования займет сто время второгоAES Производительность в Java
byte[] key = //... secret sequence of bytes
byte[] dataToSend = ...
Вот мой метод шифрования:
public static byte[] enc(byte data[], byte key[]
{
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k =
new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(dataToSend);
return encryptedData;
}
и вот тестовый код
byte [] key="1111111111111111".toByteArray();
byte [] data=new byte [32];
for(int i=0;i<1000;i++)
{
long x=System.nanoTime();
enc(data,key);
System.out.println(System.nanoTime()-x);
}
Первое значение будет примерно 20300, , тогда другое значение уменьшится до 50, 35, 42 ..etc Если что-то, что нужно загрузить, я могу сделать это перед запуском приложения. Я работаю в сетевом протоколе, и мне нужно сделать сравнение с другим.
этот код не копировать вставить. Я написал этот код здесь, поэтому ошибка компиляции my существует – primeFaceUser
'Первое значение будет примерно 20300, тогда другое значение уменьшится до 50, 35, 42' - вам, возможно, придется ознакомиться с эффектами разминки и кеширования JVM –
Шансы что весь набор классов, необходимых для AES, загружается в первую итерацию. Это также объясняет часть огромной разницы. –