上下文无关文法上下文无关文法(context-free grammar) ,它能够描述某些应用广泛的具有递归结构特征的语言。
语法分析器(parser) ,它在生成编译代码或解释程序执行前,提取出程序的语义。
与上下文无关文法相关的语言集合称为 上下文无关语言(context-free language) 。
上下文无关文法概述上下文无关文法的形式化定义上下文无关文法 是一个4元组$(V,Σ,R,...
Continue reading
安全身份验证和授权当我们抽象地讨论进行身份验证的人或事时,我们称之为主体(principal)
SSO (Single Sign-On,单点登录)
服务间的身份验证和授权在边界内允许一切。
HTTP(S)基本身份验证用户名和密码泄露
HTTP之上的HMACOAuth规范的一部分,并被广泛应用于亚马逊AWS的S3API。
使用HMAC,请求主体和私有密钥一起被哈希处理,生成的哈希值随请求一起发送。然...
Continue reading
Continue reading
走近 JavaJava虚拟机发展史Sun HotSpot VM在2006年的JavaOne大会上,Sun公苛宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpotVM)在GPL协议下公开了源码,并在此基础上建立了OpenJDK。这样,HotSpotVM便成为了Sun JDK和Open JDK两个实现极度接近的JDK项目的共同虚拟机。
在2008年和2009...
Continue reading
Continue reading
运行期优化由于Java虚拟机规范没有具体的约束规则去限制即时编译器应该如何实现,所以这部分功能完全是与虚拟机具体实现
HotSpot虚拟机内的即时编译器解释器与编译器解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。当程序运行环境...
Continue reading
Continue reading
编译期优化Java语法糖泛型与类型擦除泛型的本质是参数化类型(Parametersized Type)。
C#有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型称为 真实泛型 。
Java语言中的泛型则不一样,它只在程序源码中存在,在编译后的字节码文件中,就已经替换为原來的原生类型(RawType,也称为裸类型)了,并且在相应的地方插入了强制转换代码。Java语者中的泛型实现...
Continue reading
Continue reading
垃圾收集器与内存分配策略概述程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭。因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。
Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,...
Continue reading
Continue reading
Java内存区域与内存溢出异常Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。
运行时数据区域
程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看作是当前线程所执行的宇节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就...
Continue reading
Continue reading
类文件结构代码编译的结果从本地机器码转变为宇节码,是存储格式发展的一小步,却是编程语言发展的一大步。
语言无关性实现语言无关性的基础是虚拟机和字节码存储格式。
宇节码命令所能提供的语义描述能力比Java语言本身更加强大。
Class类文件的结构class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中...
Continue reading
Continue reading
虚拟机类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动...
Continue reading
Continue reading
虚拟机字节码执行引擎在Java虚拟机规范中制定了虚拟机宇节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。在不同的虚拟机实现里面,执行引擎在执行java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。
运行时栈帧结构栈帧(Stack Frame) 是用...
Continue reading
Continue reading