JVM:字节码混淆和 JIT

问题描述 投票:0回答:2

这是我学习Java时想到的一个问题。我们知道(如果我错了,请纠正我!)字节码运行在 JVM 之上。那么 JVM 是否会将字节码转换为其(JVM)为其编写的本机机器代码?如果真是这样,那不是更不安全吗?

还有什么是即时编译器?当要求这样做时它就会编译...我研究了一些资源,但仍然没有弄清楚即时部分。

感谢您的帮助!

java jvm jit
2个回答
0
投票

JVM 是否将字节码转换为本机机器码 它是为(JVM)编写的?

不,不一定。不过,如今默认这样做是最先进的。

如果是这样,那不是不太安全吗?

比什么更不安全? 仅仅因为可以在机器代码中执行不安全的操作(例如取消引用未初始化的指针或访问未分配的内存)并不意味着 JIT 会生成此类不安全的代码。

还有什么是即时编译器?

它是 JVM 将字节码转换为本机机器代码的部分。 “及时”这个名称意味着代码在执行时被编译(在单独的线程中)。完全编译后,JVM 会注意到某些方法已编译并且可以在机器级别上调用。


0
投票

那么 JVM 是否会将字节码转换为其(JVM)为其编写的本机机器代码?

到目前为止我看到的所有 JVM 实现都是将字节码转换为 VM 编写的本机机器代码。虽然我不明白如何以及为什么这样做会有用。

还有什么是即时编译器?

这只是在运行时将字节代码转换为本机代码的过程。尽管为了提高性能,它是由虚拟机与程序执行并行完成的。它通常还包括编译的本机代码缓存和一些其他性能改进技术。

如果是这样,那不是不太安全吗?

嗯,在很小的程度上确实如此。非常非常小的学位。对不同操作系统进行了一些与安全相关的修改,消除了 JIT 编译。例如,grsecurity Linux 内核补丁实际上是在做 JIT 不可能的事情(actually DOOM 不可能执行 JIT 编译的代码)。另一个事实是,iOS 中实现了类似的内存保护机制(可写内存页不能执行),这使得用户模式下无法进行任何 JIT 编译。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.