建设一个微网站,使用WordPress实现签到功能需要多少费用?
摘要:建设微网站需要多少钱,wordpress签到功能,我做的网站怎么是危险网站,企业培训课程概要 今天来谈一谈我们熟知的Spring框架和字节码技术有什么联系。 Java程序员几乎都了解Spring。 它的IoC(
建设微网站需要多少钱,wordpress签到功能,我做的网站怎么是危险网站,企业培训课程概要 今天来谈一谈我们熟知的Spring框架和字节码技术有什么联系。
Java程序员几乎都了解Spring。 它的IoC#xff08;依赖反转#xff09;和AOP#xff08;面向切面编程#xff09;功能非常强大、易用。而它背后的字节码生成技术#xff08;在运行时#xff0c;根据需要… 概要 今天来谈一谈我们熟知的Spring框架和字节码技术有什么联系。
Java程序员几乎都了解Spring。 它的IoC依赖反转和AOP面向切面编程功能非常强大、易用。而它背后的字节码生成技术在运行时根据需要修改和生成Java字节码的技术就是一项重要的支撑技术。
Java字节码能够在JVMJava虚拟机上解释执行或即时编译执行。其实除了JavaJVM上的Groovy、Kotlin、Closure、Scala等很多语言也都需要生成字节码。另外playscript也可以生成字节码从而在JVM上高效地运行
而且字节码生成技术很有用。 你可以用它将高级语言编译成字节码还可以向原来的代码中注入新代码来实现对性能的监测等功能。
目前我就有一个实际项目的需求。我们的一个产品需要一个规则引擎解析自定义的DSL进行规则的计算。这个规则引擎处理的数据量比较大所以它的性能越高越好。因此如果把DSL编译成字节码就最理想了。
既然字节码生成技术有很强的实用价值那么今天我就带你掌握它。
我会先带你了解Java的虚拟机和字节码的指令然后借助ASM这个工具生成字节码最后再实现从AST编译成字节码。通过这样一个过程你会加深对Java虚拟机的了解掌握字节码生成技术从而更加了解Spring的运行机制甚至有能力编写这样的工具 Java虚拟机和字节码 字节码是一种二进制格式的中间代码它不是物理机器的目标代码而是运行在Java虚拟机上可以被解释执行和即时编译执行。
在讲后端技术时我强调的都是如何生成直接在计算机上运行的二进制代码这比较符合C、C、Go等静态编译型语言。但如果想要解释执行除了直接解释执行AST以外我没有讲其他解释执行技术。
而目前更常见的解释执行的语言是采用虚拟机其中最典型的就是JVM它能够解释执行Java字节码。
而虚拟机的设计又有两种技术一是基于栈的虚拟机二是基于寄存器的虚拟机。
标准的JVM是基于栈的虚拟机后面简称“栈机”。
每一个线程都有一个JVM栈每次调用一个方法都会生成一个栈桢来支持这个方法的运行。栈桢里面又包含了本地变量数组包括方法的参数和本地变量、操作数栈和这个方法所用到的常数。这种栈桢的设计跟之前我们学过C语言的栈桢的结构其实有很大的相似性。 栈机是基于操作数栈做计算的。 以“23”的计算为例只要把它转化成逆波兰表达式“2 3 ”然后按照顺序执行就可以了。也就是 先把2入栈再把3入栈再执行加法指令这时要从栈里弹出2个操作数做加法计算再把结果压入栈。 你可以看出栈机的加法指令是不需要带操作数的就是简单的“iadd”就行 这跟你之前学过的IR都不一样。 为什么呢因为操作数都在栈里加法操作需要2个操作数从栈里弹出2个元素就行了。
也就是说指令的操作数是由栈确定的我们不需要为每个操作数显式地指定存储位置所以指令可以比较短 这是栈机的一个优点。
接下来我们聊聊字节码的特点。
字节码是什么样子的呢 我编写了一个简单的类其中的foo()方法实现了一个简单的加法计算你可以看看它对应的字节码是怎样的
public class MyClass {public int foo(int a){return a 3;}
}
在命令行终端敲入下面两行命令生成文本格式的字节码文件
javac MyClass.java
javap -v MyClass MyClass.bc
打开MyClass.bc文件你会看到下面的内容片段
public int foo(int);Code:0: iload_1 //把下标为1的本地变量入栈1: iconst_3 //把常数3入栈2: iadd //执行加法操作3: ireturn //返回
其中foo()方法一共有四条指令前三条指令是计算一个加法表达式a3。这完全是按照逆波兰表达式的顺序来执行的 先把一个本地变量入栈再把常数3入栈再执行加法运算。
如果你细心的话应该会发现 把参数a入栈的第一条指令用的下标是1而不是0。这是因为每个方法的第一个参数下标为0是当前对象实例的引用this。
