豫ICP备17040950号-2

虚拟机基于寄存器基于栈的概念和区别

什么是虚拟机

虚拟机是借助于操作系统对物理机器的一种模拟。但是我们今天所讲述的虚拟机概念比较狭义,与vmware或者virtual-box不同,而是针对具体语言所实现的虚拟机。例如在JVM或者CPython中,JAVA或者python源码会被编译成相关字节码,然后在对应虚拟机上运行,JVM或CPython会对这些字节码进行取指令,译码,执行,结果回写等操作,这些步骤和真实物理机器上的概念都很相似。相对应的二进制指令是在物理机器上运行,物理机器从内存中取指令,通过总线传输到CPU,然后译码、执行、结果存储。

寄存器虚拟机

前面说到,虚拟机是真机的一种模拟,而栈虚拟机模拟的是基于栈计算的机器,和现在常见的基于寄存器的硬件机器不同,于是相应的也有基于寄存器的虚拟机,不过这个虚拟机可能跟真机差别比较大

首先可以看看真机用寄存器的原因,计算机的存储有一个规律,访问速度越快的存储,单价(单位容量的成本)越高,因此实际实现的时候,容量会很受限,反之因为便宜而容量可以很大的存储,储存速度就慢,访问速度(或单价)从高到底大致是寄存器,cpu cache,内存,机械磁盘,磁带等,当然也有像ssd这种,介于内存和机械磁盘之间,为了减少耦合和简化设计,cpu的计算是面向寄存器(或类似的计算芯片,例如x86的FPU是基于栈实现,当然这个栈不是内存上的,是硬件内置),对于内存,主要是load和store操作,也就是说,做运算时将数据从内存load到寄存器,计算过后再store到内存里,编译器会分析出某些变量如果store后会被再次load,就不会load,因为已经在寄存器了;或者发现某些变量在一段代码中反复store到内存再load出来使用,可能直接把这些操作都优化了,只保留寄存器操作,可以大幅度提高执行速度。当然,寄存器越多,这种优化的空间就越大

后台参数校验Validator

前言

在日常的开发中,服务端对象的校验是非常重要的一个环节,比如用户注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确,但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很多。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模块中添加了自动校验。并将校验信息封装到特定的类中。

vscode配置gcc编译工具

Visual Studio Code(简称 VS Code)作为当下最热门的跨平台,包括 Windows、Mac OS X 以及 Linux 代码编辑器,VS Code 根本不具备 C、C++编译器,因此在配置 VS Code 之前,我们必须先在当前系统中,安装好可用的 C、C++ 编译器。对于 Windows 系统而言,读者可阅读C语言中文网的《MinGW下载和安装教程》一节,安装 MinGW(GCC 编译器的移植版);对于 Linux 和 Mac OS X 来说,很多系统上都默认安装有 GCC 编译器,如果没有,读者需要自己动手安装。也可以按照本文详细步骤来安装相关插件和依赖环境配置。

深入理解OSGI的模块化

OSGI(Open Service Gateway Initiative)技术是面向Java的动态模型系统。

OSGI框架实现了一个优雅、完整和动态地组件模型。应用程序(bundle)无 需重新引导可以被远程安装、启动、升级和卸载。
OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。 这些组件能够组装进一个应用和部署中。
OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。
为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。
OSGi联盟已经开发了例如像HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到。然而,服务接口能够基于专有权基础上开发。
OSGi的主要职责就是为了让开发者能够创建动态化、模块化的Java系统。