【发布时间】:2013-05-31 13:23:37
【问题描述】:
我有一个代码,我想知道是否可以阻止 JIT 优化方法 clearArraySafely? 是否可以选择性地禁用某些代码部分的 JIT?
或者我如何确定这段代码不会被优化?
private static char[] password;
public static void clearArraySafely() {
// Overwritting array
for (int i = 0 ; i <= password.length; i++) {
password[i] = 0;
//System.out.print(i); // <- I don't want to do this trick to be sure
}
password = null;
}
有没有什么好的类来存储char数组的密码?
【问题讨论】:
-
禁用优化将如何阻止某人输入
System.out.print或以其他方式捕获数据(即使用附加的调试器)......?看来问题是把自己逼到一个角落。 -
您似乎正试图防止某种攻击。除非您确定这实际上是足够的保护,否则您只是在浪费时间。如果敌人可以读取 JVM 内存的内容,即使没有 GC 保留路径,那是不是游戏就结束了?
-
密码,无论是纯文本还是散列值,都只是 Java 的字符串。不要担心保护字符串免受恶意用户的侵害。担心一些必要的“全局”手段,例如防火墙等......
-
Matt Ball@你是对的,我正在阻止什么,我认为你是对的 - 我太偏执了,一方面我在想怎么可能破解它,同时它又是怎样的无论如何都可以确保安全。
-
我想知道:这可以优化吗?我的意思是,它有实际的语义,一个对象发生了变异——JIT 是否会优化它(远离——我想那是你的麻烦)只是因为在调用方法后对象不可用? JIT 是否必须假设该引用仍然可以在某处使用?另外,为什么要先存储密码?
标签: java compiler-construction jit