首先,什么是编译技术?
几千年来,人们从裹腹耐寒到智慧创新,从未停止探索世界的步伐。同时,他们将这些智慧赋予更多的物体,比如机器。
想让机器读懂人类情感,他们之间就需要有个“翻译”,来充当人机交互的桥梁,也就是专业人士口中的编译技术。
虚拟机总共有两种,基于栈的和基于寄存器的。栈式的生成字节码会更多,但是单个指令比较简单,虚拟机更好设计。基于寄存器方式实现的虚拟机以后更好优化,执行效率会更高。当然硬件层面的寄存器和内存完全是不同的概念。而软件层面的虚拟寄存器
就是数据段的内存
。比如基于寄存器的虚拟机都是用一个变量(内存)来模拟寄存器。
前面说到,虚拟机是真机的一种模拟,而栈虚拟机模拟的是基于栈计算的机器,和现在常见的基于寄存器的硬件机器不同,于是相应的也有基于寄存器的虚拟机,不过这个虚拟机可能跟真机差别比较大
首先可以看看真机用寄存器的原因,计算机的存储有一个规律,访问速度越快的存储,单价(单位容量的成本)越高,因此实际实现的时候,容量会很受限,反之因为便宜而容量可以很大的存储,储存速度就慢,访问速度(或单价)从高到底大致是寄存器,cpu cache,内存,机械磁盘,磁带等,当然也有像ssd这种,介于内存和机械磁盘之间,为了减少耦合和简化设计,cpu的计算是面向寄存器(或类似的计算芯片,例如x86的FPU是基于栈实现,当然这个栈不是内存上的,是硬件内置),对于内存,主要是load和store操作,也就是说,做运算时将数据从内存load到寄存器,计算过后再store到内存里,编译器会分析出某些变量如果store后会被再次load,就不会load,因为已经在寄存器了;或者发现某些变量在一段代码中反复store到内存再load出来使用,可能直接把这些操作都优化了,只保留寄存器操作,可以大幅度提高执行速度。当然,寄存器越多,这种优化的空间就越大
在日常的开发中,服务端对象的校验是非常重要的一个环节,比如用户注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确,但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很多。Validator框架应运而生,它的出现就是为了解决开发人员在开发的时候减少代码的,提升开发效率。它专门用来做接口的参数校验,比如:密码长度、是否为空等等。
JSR303
定义了 Bean Validation
(校验)的标准 validation-api
,但并没有提供实现。Hibernate Validation
是对这个规范的实现 ,并且增加了 @Email
、@Length
、@Range
等注解。Spring Validation
底层依赖的就是Hibernate Validation
。
JSR303:JSR303是一项标准,只提供规范不提供实现。定义了校验规范即校验注解如:@Null、@NotNull、@Pattern。位于:javax.validation.constraints
包下。
hibernate validation:是对 JSR303 规范的实现并且进行了增强和扩展。并增加了注解:@Email、@Length、@Range等。
**spring Validation: ** 是对Hibernate Validation的二次封装。在SpringMvc模块中添加了自动校验。并将校验信息封装到特定的类中。