首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java常量池解析与字符串intern简介

在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构。 关于class文件常量池的部分可以参考之前的博文实例探索Class文件。 1.CONSTANT_Class入口解析 数组类的符号解析较为特殊。若是基本类型数组,那么虚拟机将创建该基本类型的新数组类,并创建一个Class实例来代表该类型,数组类的定义类加载器为 启动类加载器。若是引用类型的数组,那么在此之前还会进行引用类型的解析,数组类的定义类加载器为引用类型的定义类加载器。 非数组类和接口的的解析将经历以下步骤: (1).加载该类型和其所有的超类型 如果该类型在此之前已经装载到了虚拟机的当前命名空间,那么直接使用已经被装载的类型即可,否则由引用的发起类的初始类加载器进行加载。对目标类型的超类 的加载必然是在对当前类型加载完的基础上进行的,因为只有加载完当前类型,才能从class文件的super_class域找到其直接超类的符号引用,再 递归进行解析和加载,直至java.lang.Object类。而在递归返回的过程中,会检查interfaces域以查看实现或扩展了哪些接口,并再次 递归遍历对接口的符号引用。 (2).检查访问权限 随后是对目标类型的连接和初始化,这样才可以正常使用该类型。前面提到,对目标类型的初始化需要其所有超类都必须进行初始化(超接口不是必须的),并且, 由于已经对其超类进行了加载,所以不必再依赖于自该类向Object类的解析顺序,而是从Object类向该类进行初始化。类型的连接和初始化步骤如下: (3).类型校验 (4).类型准备 (5).类型解析(可推迟) 注意该过程是对被引用类型及其超类的符号引用的解析,因为对于被引用类型的某些符号引用不会立刻用到,故该步骤之前是严格意义上属于发起引用的类型的符号 解析的过程。只有在主动使用被引用类型的这些符号引用所指向的类型时,才会对这些符号引用进行解析,对其所指向的类型进行装载、连接和初始化。 (6).类型初始化

02
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【转载】数据库链接字符串大集合

    SQL Server 2005 SQL Native Client ODBC Driver 标准安全连接 Driver={SQL Native Client};Server=myServerAddress; Database=myDataBase;Uid=myUsername;Pwd=myPassword; 受信的连接 Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes; "Integrated Security=SSPI" 与 "Trusted_Connection=yes" 是相同的。 连接到一个SQL Server实例 指定服务器实例的表达式和其他SQL Server的连接字符串相同。 Driver={SQL Native Client};Server=myServerName/theInstanceName;Database=myDataBase; Trusted_Connection=yes; 指定用户名和密码 oConn.Properties("Prompt") = adPromptAlways Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase; 使用MARS (multiple active result sets) Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase; Trusted_Connection=yes;MARS_Connection=yes; "MultipleActiveResultSets=true"与MARS_Connection=yes"是相同的。 使用ADO.NET 2.0作为MARS的模块。 MARS不支持ADO.NET 1.0和ADO.NET 1.1。 验证网络数据 Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase; Trusted_Connection=yes;Encrypt=yes; 使用附加本地数据库文件的方式连接到本地SQL Server Express实例 Driver={SQL Native Client};Server=./SQLExpress; AttachDbFilename=c:/asd/qwe/mydbfile.mdf; Database=dbname;Trusted_Connection=Yes; 为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。 使用附加本地数据文件夹中的数据库文件的方式连接到本地SQL Server Express实例 Driver={SQL Native Client};Server=./SQLExpress; AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname; Trusted_Connection=Yes; 为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。 数据库镜像 Data Source=myServerAddress; Failover Partner=myMirrorServer;Initial Catalog=myDataBase;Integrated Security=True; SQL Native Client OLE DB Provider 标准连接 Provider=SQLNCLI;Server=myServerAddress; Database=myDataBase;Uid=myUsername;Pwd=myPassword; 受信的连接 Provider=SQLNCLI;Server=myServerAddress; Database=myDataBase;Trusted_Connection=yes; 连接到SQL Server实例 指定服务器实例的表达式和其他SQL Server的连接字符串相同。 Provider=SQLNCLI;Server=myServerName/theInstanceName; Database=myDataBase;Trusted_Connection=yes; 使用帐号和密码 oConn.Properties("Prompt") = adPromptAlways oConn.Open "Provider=SQLNCLI;Server=myServerAd

    05

    (译)为容器提供更好的隔离:沙箱容器技术概览

    既然主流 IT 工业都在采用基于容器的基础设施(云原生方案),那么了解这一技术的短板就很重要了。Docker、LXC 以及 RKT 等传统容器都是共享主机操作系统核心的,因此不能称之为真正的沙箱。这些技术的资源利用率很高,但是受攻击面积和潜在的攻击影响都很大,在多租户的云环境中,不同客户的容器会被同样的进行编排,这种威胁就尤其明显。主机操作系统在为每个容器创建虚拟的用户空间时,不同容器之间的隔离是很薄弱的,这是造成上述问题的根本原因。基于这样的现状,真正的沙箱式容器,成为很多研发工作的焦点。多数方案都对容器之间的边界进行了重新架构,以增强隔离。本文覆盖了四个项目,分别来自于 IBM、Google、Amazon 以及 OpenStack,几个方案的目标是一致的:为容器提供更强的隔离。IBM Nabla 在 Unikernel 的基础上构建容器;Google 的 gVisor 为运行的容器创建一个特定的内核;Amazon 的 Firecracker 是一个超轻量级的沙箱应用管理程序;OpenStack 将容器置入特定的为容器编排平台优化的虚拟机之中。下面对几个方案的概述,有助于读者应对即将到来的转型机会。

    03

    利用隐私法规的漏洞窃取用户身份

    欧盟的通用数据保护条例 (GDPR) 已成为现代隐私法律的试金石,部分原因是它赋予消费者前所未有的对其个人信息使用的控制权。然而,同样的权力可能容易被恶意攻击者滥用。在本文中考虑了社会工程师如何滥用围绕“访问权”(Right of Access)过程的法律歧义。这一假设通过对 150 多家企业的对抗性案例研究进行了验证。发现许多组织未能采取足够的保护措施来防止滥用访问权,从而有可能将敏感信息暴露给未经授权的第三方。这些信息的敏感性各不相同,从简单的公共记录到社会安全号码和帐户密码。这些发现表明,迫切需要改进主体访问请求流程的实施。为此本文提出可能的补救措施,以供政府、行业和个人进一步考虑。

    01
    领券