繁体   English   中英

JVM:字节码混淆和JIT

[英]JVM : Bytecode Confusion and JIT

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

另外,即时编译器到底是什么? 它会在需要时进行编译...我研究了一些资源,但仍未弄清即时部分。

谢谢你的帮助 !

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

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

如果是这样,它是否不那么安全?

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

另外,即时编译器到底是什么?

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

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

到目前为止,我所看到的所有JVM实现都将字节代码转换为VM为其编写的本机代码。 尽管我看不出这样做的方式和原因会很有用。

另外,即时编译器到底是什么?

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

如果是这样,它是否不那么安全?

好吧,在某种程度上是这样。 非常非常小。 对不同操作系统进行了一些与安全相关的修改,从而消除了JIT编译。 例如,grsecurity Linux内核补丁实际上无法实现JIT(实际上无法执行JIT编译的代码)。 还有一个事实是,iOS中实现了类似的内存保护机制(可写内存页面无法执行),这使得无法在用户模式下进行任何JIT编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM