CN113656008A - 用于模块化反射的限制性访问控制 - Google Patents
用于模块化反射的限制性访问控制 Download PDFInfo
- Publication number
- CN113656008A CN113656008A CN202110980499.7A CN202110980499A CN113656008A CN 113656008 A CN113656008 A CN 113656008A CN 202110980499 A CN202110980499 A CN 202110980499A CN 113656008 A CN113656008 A CN 113656008A
- Authority
- CN
- China
- Prior art keywords
- module
- access
- module element
- class
- exposed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000003607 modifier Substances 0.000 claims abstract description 53
- 238000000034 method Methods 0.000 claims description 123
- 230000004044 response Effects 0.000 claims description 19
- 230000002401 inhibitory effect Effects 0.000 claims description 8
- 238000004891 communication Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000010200 validation analysis Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000013433 optimization analysis Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/629—Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/105—Multiple levels of security
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开涉及“用于模块化反射的限制性访问控制”。如果第一模块内的模块元素还没有暴露给第二模块,则由第二模块对第一模块内的模块元素的访问被禁止。如果第一模块内的特定模块元素已暴露给第二模块,则由第二模块对该特定模块元素的访问可以允许或可以不被允许,这取决于:(a)该特定模块元素是已用公开访问修饰符声明还是已用非公开访问修饰符声明,(b)包括该特定模块元素的第二已暴露的模块元素是已用公开访问修饰符声明还是已用非公开访问修饰符声明,(c)与尝试访问第一模块的特定模块元素的操作相关联的访问级别,和/或(d)是否设置了用于访问该特定模块元素的可访问性覆盖配置。
Description
本申请是申请日为2016年6月14日、题为“用于模块化反射的限制性访问控制”的发明专利申请201680002642.2的分案申请。
对相关申请的交叉引用
本申请要求于2015年9月8日提交的美国申请No.14/847,800的权益,该申请要求于2015年8月25日提交的美国临时申请No.62/209,878的权益;本申请还要求于2015年9月8日提交的美国申请No.14/847,833的权益,该申请要求于2015年8月25日提交的美国临时申请No.62/209,878的权益;本申请还要求于2015年8月25日提交的美国临时申请No.62/209,878的权益,并且这些申请都通过引用被结合于此。在适当的范围内,做出对所有申请的优先权的要求。
技术领域
本公开涉及模块系统。具体而言,本公开涉及限制对模块系统中的未暴露的模块元素的访问。
背景技术
模块系统准许定义一组模块。模块系统中的每个模块与相应的一组代码对应。模块系统指定与特定模块对应的一组代码可以如何访问与其它模块对应的代码。对于特定模块,模块描述符(可互换地称为“模块接口”)表达该特定模块可能依赖的其它模块。对另一个模块的依赖性的声明可以被称为显式依赖性。模块描述符还表达由特定模块暴露给声明对该特定模块的显式依赖性的其它模块的该特定模块的元素。未声明对特定模块的显式依赖性的其它模块被限制访问这样的元素。
常规地,模块系统被设计为允许某些访问技术和/或可访问性配置覆盖(override)在模块描述符中声明的访问限制。在一个示例中,反射应用编程接口(API)(诸如,Java SE中java.lang.reflect)允许测试框架模块访问特定模块内的模块元素,即使那个模块元素还没有被该特定模块暴露给测试框架模块。在另一个示例中,.NET平台的反射API允许访问任何模块的内部。
在本部分中描述的方法是可以实行的方法,但不一定是先前已经构想或实行的方法。因此,除非另外指出,否则不应当假设在本部分中描述的任何方法仅仅由于这些方法包括在本部分中就被认为是现有技术。
附图说明
实施例在附图的图中通过示例而非限制的方式示出。应当注意,在本公开中对“一”或者“一个”实施例的引用不一定是相同的实施例,并且它们意味着至少一个实施例。在附图中:
图1示出了在其中可以实践本文所描述的技术的示例计算体系架构。
图2是示出适于实现本文所描述的方法和特征的计算机系统的一个实施例的框图。
图3示出了根据实施例的以框图形式的示例虚拟机存储器布局。
图4示出了根据一个或多个实施例的Java模块系统中的模块的示例。
图5示出了根据一个或多个实施例的操作。
图6示出了根据一个或多个实施例的系统。
具体实施方式
在以下描述中,为了解释的目的,阐述了许多具体细节以便提供透彻的理解。可以在没有这些具体细节的情况下实践一个或多个实施例。在一个实施例中描述的特征可以与在不同实施例中描述的特征组合。在一些示例中,众所周知的结构和设备参考框图形式进行描述,以便避免不必要地模糊本发明。
1.总体概述
2.体系架构概述
2.1示例类文件结构
2.2示例虚拟机体系架构
2.3加载、链接和初始化
3.模块系统中的模块的模块元素
4.用于访问模块元素的访问种类
5.控制对模块元素的访问
6.示例实施例
7.其它方面;扩展
8.硬件概述
1.总体概述
一个或多个实施例包括严格控制对模块系统中的模块的访问。
在一个实施例中,如果第一模块内的模块元素还没有暴露给第二模块,则由第二模块对第一模块内的该模块元素的访问被严格禁止。由第二模块对第一模块的未暴露的模块元素的访问被严格禁止,而不管(a)未暴露的模块元素是已用公开访问修饰符声明还是已用非公开访问修饰符声明,(b)与尝试访问第一模块的未暴露的模块元素的操作相关联的访问级别,以及(c)是否为未暴露的模块元素设置了可访问性覆盖配置。在示例中,即使当使用具有被设置用于尝试访问未暴露的模块元素的可访问性覆盖配置的反射操作来尝试访问时,消费者模块对提供者模块的该未暴露的模块元素的访问也被禁止。
在示例中,即使当使用具有将未暴露的模块元素设置为可公开访问的可访问性覆盖配置的反射操作来尝试访问时,由第二模块对第一模块内的该未暴露的模块元素的访问也被严格禁止。
在实施例中,如果第一模块内的特定模块元素已暴露给第二模块,则由第二模块对该特定模块元素的访问可以被允许或者可以不被允许。可以基于一个或多个因素来确定对访问已暴露的特定模块元素的许可,这些因素包括但不限于:(a)特定模块元素是已用公开访问修饰符声明还是已用非公开访问修饰符声明,(b)包括该特定模块元素的第二已暴露的模块元素是已用公开访问修饰符声明还是已用非公开访问修饰符声明,(c)与尝试访问第一模块的未暴露的模块元素的操作相关联的访问级别,以及(d)是否为该未暴露的模块元素设置了可访问性覆盖配置。
在示例中,在第一模块中的模块元素是具有非公开访问修饰符的字段声明。该字段声明在具有公开访问修饰符的类声明内。通过暴露包括该类声明(以及因此包括该字段声明)的包,字段声明和类声明两者都被暴露。如果第二模块尝试使用反射操作来访问(具有非公开访问修饰符的)字段声明,则基于该反射操作是否为该字段声明设置可访问性覆盖配置来允许访问或者禁止访问。如果没有设置可访问性覆盖配置,则字段声明中的非公开访问修饰符指示第二模块被禁止访问该字段声明。如果设置了可访问性覆盖配置,则字段声明中的非公开访问修饰符被覆盖并且第二模块被允许访问该字段声明。
在本说明书中描述和/或在权利要求中描述的一个或多个实施例可以不包括在该总体概述部分中。
2.体系架构概述
图1示出了在其中可以实践本文所描述的技术的示例体系架构。关于示例体系架构所描述的软件和/或硬件组件可以被省略或与不同于本文所描述的功能的一组功能相关联。根据一个或多个实施例,可以在环境内使用本文中未描述的软件和/或硬件组件。因此,示例环境不应当被认为是限制任何权利要求的范围。
如图1所示,计算体系架构100包括源代码文件101,源代码文件101由编译器102编译成表示要被执行的程序的类文件103。类文件103然后由执行平台112加载和执行,执行平台112包括运行时环境113、操作系统111以及使得能够在运行时环境113和操作系统之间通信的一个或多个应用编程接口(API)110。运行时环境112包括虚拟机104,虚拟机104包括各种组件,诸如存储器管理器105(其可以包括垃圾收集器)、检查类文件103的有效性的类文件验证器106、定位和构建类的存储器内表示的类加载器107、用于执行虚拟机104代码的解释器108以及用于产生经优化的机器级代码的准时(JIT)编译器109。
在实施例中,计算体系架构100包括源代码文件101,源代码文件101包含用特定编程语言(诸如Java、C、C++、C#、Ruby、Perl等)编写的代码。因此,源代码文件101遵循用于相关联语言的一组特定语法和/或语义规则。例如,用Java编写的代码遵循Java语言规范。然而,由于规范随时间被更新和修订,因此源代码文件101可以与指示源代码文件101所遵循的规范的修订版本的版本号相关联。用来编写源代码文件101的确切编程语言通常不是关键的。
在各种实施例中,编译器102将根据针对程序员方便的规范编写的源代码转换为可由特定机器环境直接执行的机器代码或目标代码,或者可由能够在各种特定机器环境之上运行的虚拟机104执行的诸如字节码之类的中间表示(“虚拟机代码/指令”)。虚拟机指令可由虚拟机104以比源代码更直接和高效的方式执行。将源代码转换为虚拟机指令包括将源代码功能从语言映射到利用底层资源(诸如数据结构)的虚拟机功能。通常,由程序员经源代码以简单术语呈现的功能被转换成更复杂的步骤,这些步骤更直接地映射到由虚拟机104所驻留的底层硬件支持的指令集。
一般而言,程序作为经编译的程序或经解释的程序来执行。当程序被编译时,代码在执行之前从第一语言全局变换为第二语言。由于变换代码的工作是提前执行的,因此经编译的代码往往具有优异的运行时性能。此外,由于变换在执行之前在全局发生,因此可以使用诸如常量合并(constant folding)、死代码消除(dead code elimination)、内联(inlining)等的技术来分析和优化代码。然而,取决于被执行的程序,启动时间可能很长。此外,插入新代码将需要使程序下线、重新编译和重新执行。对于被设计为允许代码在程序的执行期间被插入的许多动态语言(诸如Java),纯编译的方法可能是不适当的。当程序被解释时,程序的代码在程序执行时被逐行读取并且被转换为机器级指令。因此,程序具有短的启动时间(可以几乎立即开始执行),但是运行时性能由于即时(on the fly)执行变换而降低。此外,由于每条指令被单独分析,因此依赖于程序的更全局地分析的许多优化不能被执行。
在一些实施例中,虚拟机104包括解释器108和JIT编译器109(或实现这两个方面的组件),并且使用解释技术和编译技术的组合来执行程序。例如,虚拟机104可以初始地通过经由解释器108解释表示程序的虚拟机指令来开始,同时跟踪与程序行为相关的统计信息,这些统计信息诸如不同的代码部分或代码块多频繁地被虚拟机104执行。一旦代码块超过阈值(变“热”),虚拟机104就调取JIT编译器109来执行对该块的分析并且生成经优化的机器级指令,该经优化的机器级指令代替“热”的代码块用于将来的执行。由于程序往往花费大部分时间执行整个代码的一小部分,所以只编译程序的“热”的部分可以提供与经完全编译的代码相似的性能,但没有启动惩罚。此外,尽管优化分析被约束到被代替的“热”块,但是还存在比单独转换每个指令远远更大的优化潜力。对于上述示例存在若干变体,诸如分层编译。
为了提供清楚的示例,源代码文件101已被示为要由执行平台111执行的程序的“顶层”表示。虽然计算体系架构100将源代码文件101绘为“顶层”程序表示,但是在其它实施例中,源代码文件101可以是经由将不同语言的代码文件处理成源代码文件101的语言的“更高级”编译器接收到的中间表示。以下公开中的一些示例假设源代码文件101遵循基于类的面向对象的编程语言。但是,这不是对利用本文所描述的特征的要求。
在实施例中,编译器102接收源代码文件101作为输入,并且将源代码文件101转换为以由虚拟机104所期望的格式的类文件103。例如,在JVM的上下文中,Java虚拟机规范定义了期望类文件103遵循的特定类文件格式。在一些实施例中,类文件103包含已从源代码文件101转换的虚拟机指令。但是,在其它实施例中,类文件103也可以包含其它结构,诸如识别常量值的表和/或与各种结构(类、字段、方法等)相关的元数据。
以下讨论假设类文件103中的每一个表示在源代码文件101中定义的(或由编译器102/虚拟机104动态生成的)相应的“类”。然而,上述假设不是严格的要求并且将取决于虚拟机104的实现。因此,无论类文件103的确切格式如何,本文所描述的技术仍然可以被执行。在一些实施例中,类文件103被划分为一个或多个“库”或“包”,其中每一个包括提供相关功能的类的集合。例如,库可以包含实现输入/输出(I/O)操作、数学工具、密码技术、图形实用工具等的一个或多个类文件。此外,一些类(或那些类中的字段/方法)可以包括将这些类(或那些类中的字段/方法)的使用限制在特定类/库/包内或限制到具有适当许可的类的访问限制。
2.1示例类文件结构
图2示出了根据实施例的以框图形式的类文件200的示例结构。为了提供清楚的示例,本公开的其余部分假设计算体系架构100的类文件103遵循本部分中所描述的示例类文件200的结构。然而,在实际环境中,类文件200的结构将取决于虚拟机104的实现。此外,本文所讨论的一个或多个特征可以修改类文件200的结构,以例如添加附加的结构类型。因此,类文件200的确切结构对于本文所描述的技术不是关键的。为了第2.1部分的目的,“类”或“当前类”是指由类文件200表示的类。
在图2中,类文件200由类成员构成,这些类成员包括但不限于常量表201、字段结构208、类元数据204和方法结构209。在实施例中,常量表201是除了其它功能之外还充当类的符号表的数据结构。例如,常量表201可以存储与在源代码文件101中使用的各种标识符相关的数据,诸如类型、范围、内容和/或位置。常量表201具有用于值结构202(表示类型int、long、double、float、byte、string等的常量值)、类信息结构203、名称和类型信息结构205、字段引用结构206、以及由编译器102从源代码文件101导出的方法引用结构207的条目。在实施例中,常量表201实现为将索引i映射到结构j的数组。然而,常量表201的确切实现不是关键的。
在一些实施例中,常量表201的条目包括对其它常量表201条目进行索引的结构。例如,用于表示串的值结构202之一的条目可以保持识别其“类型”为串的标签,以及可以保持对常量表201的存储表示该串的ASCII字符的char、byte或int值的一个或多个其它值结构202的索引。
在实施例中,常量表201的字段引用结构206将对表示定义字段的类信息结构203之一的索引保持在常量表201中,并且将对提供该字段的名称和描述符的名称和类型信息结构205之一的索引保持在常量表201中。常量表201的方法引用结构207将对表示定义方法的类的类信息结构203之一的索引保持在常量表201中,并且将对提供该方法的名称和描述符的名称和类型信息结构205之一的索引保持在常量表201中。类信息结构203将对保持相关联的类的名称的值结构202之一的索引保持在常量表201中。
名称和类型信息结构205将对存储字段/方法的名称的值结构202之一的索引保持在常量表201中,并且将对存储描述符的值结构202之一的索引保持在常量表201中。
在实施例中,类元数据204包括用于类的元数据,诸如(一个或多个)版本号、常量池中的条目数量、字段数量、方法数量、访问标志(类是否是公开的(public)、非公开的(non-public)、最终的(final)、抽象的(abstract)等)、常量表201中的对识别当前类的类信息结构203之一的索引、常量表201中的对识别超类(superclass)(如果有的话)的类信息结构203之一的索引,等等。
在实施例中,字段结构208表示识别类的各个字段的一组结构。字段结构208为类的每个字段存储字段的访问者标志(字段是否是静态的(static)、公开的(public)、非公开的(non-public)、最终的(final)等)、对常量表201中保持字段的名称的值结构202之一的索引、以及对常量表201中保持字段的描述符的值结构202之一的索引。
在实施例中,方法结构209表示识别类的各个方法的一组结构。方法结构209为类的每个方法存储方法的访问者标志(例如,方法是否是静态的(static)、公开的(public)、非公开的(non-public)、同步的(synchronized)等)、对常量表201中保持方法的名称的值结构202之一的索引、对常量表201中保持方法的描述符的值结构202之一的索引、以及与如在源代码文件101中定义的方法的主体对应的虚拟机指令。
在实施例中,描述符表示字段或方法的类型。例如,描述符可以实现为遵循特定语法的串。虽然确切的语法不是重要的,但以下将描述几个示例。
在描述符表示字段的类型的示例中,描述符识别由该字段保持的数据的类型。在实施例中,字段可以保持基本类型、对象或数组。当字段保持基本类型时,描述符是识别基本类型的串(例如,“B”=byte、“C”=char、“D”=double、“F”=float、“I”=int、“J”=longint等)。当字段保持对象时,描述符是识别对象的类名称(例如,“L ClassName”)的串。在这种情况下,“L”指示引用,因此“L ClassName”表示对类ClassName的对象的引用。当字段是数组时,描述符识别由数组保持的类型。例如,“[B”指示字节数组,其中“[”指示数组并且“B”指示该数组保持基本类型字节。然而,由于数组可以嵌套,因此数组的描述符也可以指示嵌套。例如,“[[L ClassName”指示数组,其中每个索引数组,该数组保持类ClassName的对象。在一些实施例中,ClassName是完全限定的,并且包括类的简单名称以及类的路径名。例如,ClassName可以指示文件存储在包、库或托管类文件200的文件系统中的什么地方。
在方法的情况下,描述符识别方法的参量和方法的返回类型。例如,方法描述符可以按照一般形式“({Parameter Descriptor})ReturnDescriptor”(即“({参量描述符})返回描述符”),其中{ParameterDescriptor}是表示参量的字段描述符的列表,并且ReturnDescriptor是识别返回类型的字段描述符。例如,串“V”可以用来表示void返回类型。因此,在源代码文件101中定义为“Object m(int I,double d,Thread t){...}”的方法与描述符“(I D LThread)L Object”匹配。
在实施例中,保持在方法结构209中的虚拟机指令包括引用常量表201的条目的操作。使用Java作为示例,考虑以下类:
class A
{
int addl2andl3(){
return B.addTwo(12,13);
}
}
在以上示例中,Java方法add12andl3在类A中定义,不带参量,并且返回整数。方法add12and13的主体调用类B的静态方法addTwo,静态方法addTwo采用常整数值12和13作为参量,并且返回结果。因此,在常量表201中,编译器102除其它条目之外还包括与对方法B.addTwo的调用对应的方法引用结构。在Java中,对方法的调用向下编译为JVM的字节码中的invoke(调取)命令(在这种情况下为invokestatic,因为addTwo是类B的静态方法)。invoke命令被提供常量表201中的与方法引用结构对应的索引,该方法引用结构识别定义addTwo的类“B”、addTwo的名称“addTwo”、以及addTwo的描述符“(I I)I”。例如,假设上述方法引用存储在索引4处,则字节码指令可以表现为“invokestatic#4”。
由于常量表201利用具有携带识别信息的结构(而不是对存储器位置的直接引用)来符号地引用类、方法和字段,因此常量表201的条目被称为“符号引用”。符号引用被用于类文件103的一个原因是因为在一些实施例中编译器102不知道类一旦被加载到运行时环境112中将如何被存储以及存储在哪里。如将在2.3部分中所描述的,在所引用的类(及相关联的结构)已被加载到运行时环境中并且被分配具体存储器位置之后,最终符号引用的运行时表示被虚拟机104解析为实际的存储器地址。
2.2示例虚拟机体系架构
图3示出了根据实施例的以框图形式的示例虚拟机存储器布局300。为了提供清楚的示例,剩余的讨论将假设虚拟机104遵循图3中绘出的虚拟机存储器布局300。此外,虽然虚拟机存储器布局300的组件可以被称为存储器“区域”,但是不要求这些存储器区域是连续的。
在图3所示的示例中,虚拟机存储器布局300被划分为共享区域301和线程区域307。共享区域301表示存储器中的、在其中存储在虚拟机104上执行的各个线程之间共享的结构的区域。共享区域301包括堆302和按类(per-class)区域303。在实施例中,堆302表示从中分配用于类实例和数组的存储器的运行时数据区域。在实施例中,按类区域303表示在其中存储与各个类有关的数据的存储器区域。在实施例中,对于每个被加载的类,按类区域303包括表示来自类的常量表201的数据的运行时常量池304、字段和方法数据306(例如,以保持类的静态字段)以及表示用于类的方法的虚拟机指令的方法代码305。
线程区域307表示在其中存储特定于各个线程的结构的存储器区域。在图3中,线程区域307包括线程结构308和线程结构311,它们表示由不同线程利用的按线程(per-thread)结构。为了提供清楚的示例,图3中绘出的线程区域307假设两个线程正在虚拟机104上执行。但是,在实际环境中,虚拟机104可以执行任何任意数量的线程,其中线程结构的数量相应地缩放。
在实施例中,线程结构308包括程序计数器309和虚拟机堆栈310。类似地,线程结构311包括程序计数器312和虚拟机堆栈313。在实施例中,程序计数器309和程序计数器312存储由虚拟机指令的相应的线程执行的该虚拟机指令的当前地址。
因此,当线程逐步通过指令时,程序计数器被更新以维护对当前指令的索引。在实施例中,虚拟机堆栈310和虚拟机堆栈313各自存储用于其相应线程的、保持局部变量和部分结果并且还用于方法调取和返回的帧(frame)。
在实施例中,帧是用来存储数据和部分结果、返回方法的值、以及执行动态链接的数据结构。每次调取方法时,创建新的帧。当使得帧生成的方法完成时,帧被销毁。因此,当线程执行方法调取时,虚拟机104生成新帧并将该帧推送到与该线程相关联的虚拟机堆栈上。
当方法调取完成时,虚拟机104将方法调取的结果传递回到先前的帧,并将当前帧从堆栈中弹出。在实施例中,对于给定的线程,在任意点处有一个帧是活动的。这个活动帧被称为当前帧,使得生成当前帧的方法被称为当前方法,并且当前方法所属的类被称为当前类。
2.3加载、链接和初始化
在实施例中,虚拟机104动态地加载、链接和初始化类。加载是找到具有特定名称的类并在运行时环境112的存储器内从那个类的相关联类文件200创建表示的过程。例如,为类在虚拟机存储器布局300的按类区域303内创建运行时常量池304、方法代码305以及字段和方法数据306。链接是取得类的存储器中表示并将其与虚拟机104的运行时状态组合,使得类的方法可以被执行的过程。初始化是执行类构造函数(constructor)以设置字段和类的方法数据306的开始状态和/或为经初始化的类在堆302上创建类实例的过程。
以下是可以由虚拟机104实现的加载、链接和初始化技术的示例。然而,在许多实施例中,这些步骤可以被交错,使得初始类被加载,然后在链接期间,第二个类被加载以解析在第一个类中找到的符号引用,这继而导致第三个类被加载,等等。因此,通过加载、链接和初始化阶段的进展可以因类而异。此外,一些实施例可以延迟(“懒惰”执行)加载、链接和初始化过程中的一个或多个功能,直到实际需要该类。例如,方法引用的解析可以被延迟,直到调取该方法的虚拟机指令被执行。因此,对于各个类执行步骤的确切时间在各种实现之间会非常不同。
为了开始加载过程,虚拟机104通过调取加载初始类的类加载器107来启动。指定初始类的技术在实施例之间将是不同的。例如,一种技术可以使虚拟机104在启动时接受指定初始类的命令行参数。
为了加载类,类加载器107剖析与该类对应的类文件200,并且确定类文件200是否是良好构造的(满足虚拟机104的语法期望)。如果类文件200不是良好构造的,则类加载器107生成错误。例如,在Java中,错误可能以异常(exception)的形式生成,其中异常被抛出给异常处理器进行处理。否则,类加载器107通过为类在按类区域303内分配运行时常量池304、方法代码305以及字段和方法数据306来生成该类的存储器中表示。
在一些实施例中,当类加载器107加载类时,类加载器107还递归地加载被加载类的超类。例如,虚拟机104可以确保在继续特定类的加载、链接和初始化过程之前,该特定类的超类被加载、链接和/或初始化。
在链接期间,虚拟机104验证类、准备类、并且执行在类的运行时常量池304中定义的符号引用的解析。
为了验证类,虚拟机104检查类的存储器中表示在结构上是否正确。例如,虚拟机104可以检查除通用类Object之外的每个类具有超类、检查最终类没有子类以及最终方法没有被覆盖、检查常量池条目是否彼此一致、检查当前类是否具有对常量池304中引用的类/字段/结构的正确访问许可、检查方法的虚拟机104代码将不会引起意外行为(例如,确保跳转指令不会将虚拟机104发送到超出该方法的结束),等等。在验证期间执行的确切检查取决于虚拟机104的实现。在一些情况下,验证会导致附加的类被加载,但不一定要求那些类在继续之前也被链接。例如,假设类A包含对类B的静态字段的引用。在验证期间,虚拟机104可以检查类B,以确保被引用的静态字段实际存在,这可能导致类B的加载,但不一定导致类B的链接或初始化。然而,在一些实施例中,某些验证检查可以被延迟直到稍晚的阶段,诸如在符号引用的解析期间被检查。例如,一些实施例可以延迟检查对符号引用的访问许可,直到那些引用被解析。
为了准备类,虚拟机104将位于该类的字段和方法数据306内的静态字段初始化为默认值。在某些情况下,将静态字段设置为默认值可能与运行类的构造函数不同。例如,验证过程可以将静态字段清零或将其设置为构造函数期望那些字段在初始化期间具有的值。
在解析期间,虚拟机104从包括在类的运行时常量池304中的符号引用动态地确定具体的存储器地址。为了解析符号引用,虚拟机104利用类加载器107加载在符号引用中识别出的类(如果尚未加载)。一旦被加载,虚拟机104就知道所引用的类及其字段/方法在按类区域303内的存储器位置。然后,虚拟机104用对所引用的类、字段或方法的具体存储器位置的引用替换符号引用。在实施例中,虚拟机104将解析进行高速缓存,以在当虚拟机104处理另一个类时遇到相同类/名称/描述符的情况下进行重用。例如,在一些情况下,类A和类B可能调取类C的相同方法。因此,当对类A执行解析时,该结果可以被高速缓存并且在解析类B中的相同符号引用期间被重用以减少开销。
在一些实施例中,在链接期间解析符号引用的步骤是可选的。例如,实施例可以以“懒惰”的方式执行符号解析,从而延迟解析的步骤直到需要所引用的类/方法/字段的虚拟机指令被执行。
在初始化期间,虚拟机104执行类的构造函数以设置该类的开始状态。例如,初始化可以初始化类的字段和方法数据306并且生成/初始化由构造函数创建的堆302上的任何类实例。例如,用于类的类文件200可以指定特定方法是用于设置开始状态的构造函数。因此,在初始化期间,虚拟机104执行该构造函数的指令。
在一些实施例中,虚拟机104通过初始地检查字段/方法是否在所引用的类中被定义来执行对字段和方法引用的解析。否则,虚拟机104针对所引用的字段/方法递归地搜索所引用的类的超类,直到定位该字段/方法或者到达顶级超类,在到达顶级超类的情况下生成错误。
模块系统中的模块的模块元素
一个或多个实施例可应用于模块系统。模块系统内的每个模块与相应的一组代码对应(称为“模块代码”)。每个模块与一个或多个模块元素相关联。如本文所指的模块元素与模块代码的一部分对应。模块元素(模块代码的部分)本身可以包括附加的模块元素(模块代码的子部分)。
用不同编程语言实现的模块系统可以用不同类型的模块元素来定义。为了解释的目的,本文所述的一些示例指Java模块系统中的模块的特定模块元素。但是,实施例同样可应用于用其它编程语言实现的模块系统中的不同类型的模块元素。
在Java模块系统中,每个模块包括一个或多个包。每个包包括一个或多个类。每个类包括一个或多个类成员,诸如字段和方法。如本文所指的方法包括可以被调取用于通过实例化类来创建对象的构造函数。如本文关于Java模块系统所提及的,模块元素可以包括包、类或类成员。
暴露模块元素
在实施例中,模块的模块元素可以暴露给另一个模块或者可以不暴露给另一个模块。在Java模块系统中,当与模块对应的模块描述符包括其中包被识别为参量的“exports”表达式时,包可以由模块暴露。包可以被输出到一组指定的模块(称为“限定性输出”)或被输出到模块系统中的所有其它模块(称为“非限定性输出”)。
如果一组条件中的任何条件被满足,则提供者模块的模块元素可以由提供者模块暴露给消费者模块。该组条件可以包括但不限于(a)在提供者模块的描述符内将模块元素经由限定性或非限定性输出暴露给消费者模块的声明,(b)经由接口(例如,命令行接口)接收到的用户指令,(c)由运行时环境基于检测到与暴露模块元素的许可相关联的触发事件而做出的确定,或(d)指示模块系统暴露模块元素的任何其它指令。
特定模块元素可以通过暴露该特定模块元素本身或通过暴露包括该特定模块元素的另一个模块元素来暴露。在一个示例中,可以通过暴露包括类的包来暴露类。类的类成员也通过暴露包括该类的包而被暴露。
一个或多个实施例涉及访问模块系统中的模块的模块元素。尝试访问的模块在本文被称为消费者模块,并且被访问的模块在本文被称为提供者模块。针对不同的访问操作,模块可以用作消费者模块或者用作提供者模块。
在实施例中,确定提供者模块的模块元素是否可以由消费者模块访问是至少部分地基于提供者模块中的模块元素是否已被暴露给消费者模块。确定提供者模块的模块元素是否可以由消费者模块访问的访问控制在第5部分“控制对模块元素的访问”中进一步描述。
用于模块元素的访问修饰符
在实施例中,模块元素利用访问修饰符来声明。访问修饰符识别模块元素的可访问性配置。可访问性配置声明模块元素是(a)可公开访问的或(b)不可公开访问的。在一个示例中,修饰符“public(公开)”指示模块元素是可公开访问的,并且修饰符“private(私有)”指示模块元素不是可公开访问的。但是,所声明的访问修饰符本身不控制模块元素从模块的外部是可访问的还是不可访问的。确定提供者模块的模块元素是否可以由消费者模块访问的访问控制在第5部分“控制对模块元素的访问”中进一步描述。
4.可能需要由消费者模块访问提供者模块的模块元素的操作
在实施例中,不同种类的操作需要由消费者模块访问提供者模块的模块元素。
可以对字节码执行操作以枚举、分析和/或分类字节码的部分。用于访问模块元素的操作的一些示例包括在Java反射API中识别出的反射操作。
在实施例中,操作包括获取或设置模块元素的值,其中(a)模块元素表示字段,(b)获取或设置相对于对象执行,以及(c)该对象是另一个模块元素(例如,包括该字段的类)的实例。一组示例操作包括但不限于:
(a)getField(String name):返回Field(字段)对象,该Field对象反映Class(类)对象(其中命令是针对该Class对象执行的)所表示的类或接口的指定字段。
(b)getFields():返回包含Field对象的数组,该Field对象的数组反映Class对象(其中命令是针对该Class对象执行的)所表示的类或接口的所有字段。
(c)getDeclaredFields():返回Field对象数组,该Field对象的数组反映Class对象(其中命令是针对该Class对象执行的)所表示的类或接口所声明的所有字段。
(d)getDeclaredMethods():返回Method(方法)对象数组,该Method对象数组反映Class对象(其中命令是针对该Class对象执行的)所表示的类或接口所声明的所有方法。
(e)getSuperclass():返回表示类(其中命令是针对该类执行的)所表示的实体(类、接口、原始类型或void)的超类的类。
(f)set(Object obj,Object value):将指定的对象参数上的Field对象(其中命令是针对该Field对象执行的)所表示的字段的值设置为指定的新值。
(g)get(Object obj):返回指定的对象上的Field(其中命令是针对该Field执行的)所表示的字段的值。
在实施例中,操作包括消费者模块调取提供者模块的模块元素。作为方法的模块元素可以利用反射技术或者不利用反射技术来调取。用于使用反射来调取方法的一个示例命令包括java.lang.reflect.Method.invoke()。第一参数是要对其调取特定方法的对象实例。如果该方法是静态的,则第一参数可以为空(null)。后续的参数是该方法的参数。
在实施例中,操作包括消费者模块实例化提供者模块的模块元素。类(提供者模块的第一模块元素)可以由消费者模块通过调取该类的构造函数(提供者模块的第二模块元素)来实例化。
在示例中,类Spaceship是提供者模块中的第一模块元素。类Spaceship包括第二模块元素,第二模块元素是方法声明fireMissile()。单独的类CommandCenter是消费者模块中的模块元素。类CommandCenter(消费者模块的模块元素)可以包括操作以:(a)实例化类型Spaceship(提供者模块的模块元素)的对象和(b)在来自(a)的SpaceShip的实例上调取方法fireMissile()。
5.控制对模块元素的访问
如上所述,一个或多个操作需要由消费者模块访问提供者模块的模块元素。一个或多个实施例包括控制由消费者模块对提供者模块的模块元素的访问。控制访问包括允许访问或禁止访问。如果由消费者模块对提供者模块的模块元素的访问被允许,则操作被成功地编译或执行。如果由消费者模块对提供者模块的模块元素的访问被禁止,则操作可以不被成功地编译和/或可以不被成功地执行。如本文所述,用于控制对特定类型的模块元素的访问的因素可应用于控制对另一种类型的模块元素的访问。
图4示出了根据一个或多个实施例的在Java模块系统中的模块的示例。(使用Java模块系统或其它模块系统定义的)其它模块可以包括比图4中所示更多、更少和/或不同的模块元素。模块(例如,模块402)可以包括任何数量的包。包(例如,包404)可以包括任何数量的类。类(例如,类406)可以包括任何数量的类成员(例如,类成员408)。
一个或多个实施例包括控制由消费者模块(例如,模块430)对提供者模块(例如,模块402)的模块元素(即,包404、类406或类成员408)的访问。为了使模块430访问模块402的类成员408,模块430可能需要访问(a)类成员408本身,(b)包括类成员408的类406,以及(c)包括类406的包404的访问许可。此外,可应用于模块元素(例如,类406)的访问控制可以确定访问通过实例化模块元素创建的对象的操作是被允许还是被禁止。在示例中,访问来获得或修改对象的字段的值是基于对被实例化以创建该对象的特定类的访问控制而被允许或禁止的。
图5示出了用于允许或禁止由消费者模块对提供者模块的模块元素的访问的一组示例步骤。以下参考图5描述的步骤可以在运行时之前和/或在运行时期间执行。编译器、解释器和/或运行时环境可以执行以下描述的步骤中的一个或多个步骤。
初始地,识别消费者模块尝试访问提供者模块的模块元素的操作(步骤502)。该操作可以由编译器在编译过程期间识别。该操作可以在请求执行操作时由运行时环境识别。需要访问模块元素的操作的种类的一些示例在以上标题为“可能需要由消费者模块访问提供者模块的模块元素的操作”的第4部分中指示。
响应于识别消费者模块尝试访问提供者模块的模块元素的操作,需要检查以确定消费者模块是否具有访问提供者模块的模块元素的必要许可。该检查是如下所述的多步骤过程。
在实施例中,做出提供者模块的模块元素是否已暴露给消费者模块的确定(步骤504)。如上面提及的,如果(a)特定模块元素本身已暴露给消费者模块或(b)如果包括特定模块元素的第二模块元素已暴露给消费者模块,则提供者模块的特定模块元素可以暴露给消费者模块。在Java模块系统中,如果提供者模块中的包已暴露给消费者模块,则包内的所有类和类中的类成员都已暴露给消费者模块。在图4所示的示例中,将模块402的包404暴露给模块430包括将类406和类408暴露给模块430。模块402的包404可以利用专门识别模块430的限定性输出暴露给模块430。模块402的包404可以利用针对模块系统中所有模块的非限定性输出(不专门识别模块430)暴露给模块430。
如果提供者模块的模块元素还没有暴露给消费者模块,则消费者模块被严格禁止访问提供者模块的模块元素(步骤506)。由消费者模块对提供者模块的模块元素的访问被严格禁止,而不管(a)模块元素声明中的访问修饰符,(b)为模块元素表达的可访问性覆盖配置(在下面描述),或(c)与尝试访问模块元素的操作相关联的访问级别(在下面描述)。严格禁止访问可以包括生成编译时错误和/或运行时错误(例如,抛出异常),这阻止尝试访问模块元素的操作的执行。
在图4中所示的示例中,如果类成员408还没有暴露给模块430,则由模块430对类成员408的访问被严格禁止。对未暴露的类成员408的严格禁止是可应用的,即使(a)类成员408和类406是用公开访问修饰符声明的,(b)可访问性覆盖配置被设置为覆盖任何非公开访问修饰符,以及(c)访问类成员408的尝试依赖于具有最高可能的访问级别的操作。类似地,如果类406还没有暴露给模块430,则由模块430对类406的访问被严格禁止。
如果在操作504中做出提供者模块的模块元素已暴露给消费者模块的确定,则可以允许访问或可以不允许访问。换句话说,将提供者模块的模块元素暴露给消费者模块不能保证消费者模块被允许访问该模块元素。允许或禁止由消费者模块对提供者模块的已暴露的模块元素的访问取决于如下所述的一组因素。
在实施例中,做出已暴露的模块元素是否用公开访问修饰符声明的确定(步骤508)。可以检验模块元素声明以确定为已暴露的模块元素配置了公开访问修饰符还是非公开访问修饰符。此外,如果已暴露的模块元素被包括在具有访问修饰符的另一个父模块元素内,则执行检查以确定父模块元素的声明是包括公开访问修饰符还是包括非公开访问修饰符。例如,如果已暴露的模块元素是特定类的类成员,则检验类成员声明和类声明中的每一个的访问修饰符,以确定是否两者都包括公开访问修饰符。
如果模块元素(以及具有访问修饰符的任何父模块元素)是用公开访问修饰符声明的,则由消费者模块对提供者模块的模块元素的访问被允许(步骤514)。允许由消费者模块访问提供者模块的模块元素容许成功编译和/或执行尝试访问该模块元素的操作。
如果已暴露的模块元素(或者如果该模块元素的任何父模块元素)是用非公开访问修饰符声明的,则需要进行附加的分析以确定对已暴露的模块元素的访问是被允许还是被禁止。访问具有非公开访问修饰符的已暴露的模块元素可以取决于与尝试访问的操作相关联的访问级别。图5定义具有访问具有非公开修饰符的暴露的模块元素所需的最小访问级别的操作,作为具有针对已暴露的模块元素设置的可访问性覆盖配置的反射操作(以下详细描述)。然而,其它实施例同样可应用于在其中不同操作与不同访问级别相关联的任何系统。例如,(消费者模块中的)具有第一访问级别的第一操作被允许访问在提供者模块的已暴露的包中的公开类的非公开类成员。然而,具有第一访问级别的第一操作被禁止访问在提供者模块的已暴露的包中的非公开类的非公开类成员。(相同消费者模块中的)具有第二访问级别(高于第一访问级别)的第二操作被允许访问在提供者模块的已暴露的包中的非公开类的非公开类成员。因此,以下描述的图5的特定操作510和512应当被理解为用于确定对具有非公开修饰符的已暴露的模块元素的访问的一组示例规则。特定操作510和512不应当被解释为限制在其中利用一组不同的访问级别来定义操作的其它实施例的范围。
继续图5,在实施例中,如果(a)操作是反射操作(步骤510)并且(b)针对被访问的已暴露的模块元素设置了可访问性覆盖配置(步骤512),则具有非公开访问修饰符的已暴露的模块元素可以被访问。因此,如果操作是具有针对被访问的模块元素设置的可访问性覆盖配置的反射操作,则对模块元素的访问被允许(步骤514)。在实施例中,可访问性覆盖配置对消费者模块可用,用于访问提供者模块的模块元素。即使可访问性覆盖配置被设置为访问提供者模块的模块元素,可访问性覆盖配置也可以独立于用于提供者模块的任何配置对消费者模块可用。
在示例中,(来自Java反射API的)反射操作包括get(Object obj),get(Objectobj)返回由指定的对象上的Field(其中命令是针对该Field执行的)表示的字段的值。反射操作还包括setAccessible(),setAccessible()为具有非公开修饰符的已暴露的模块元素设置可访问性覆盖配置。具有可访问性覆盖配置的反射操作被允许访问具有非公开修饰符的已暴露的模块元素。已暴露的模块元素是提供者模块的正由消费者模块访问的元素。
6.示例实施例
一个或多个实施例包括非临时性计算机可读介质,该介质包括指令,该指令在由一个或多个硬件处理器执行时,使得执行一组步骤。该组步骤包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作;确定模块元素是否已由第二组模块代码暴露给第一组模块代码;以及响应于确定模块元素还没有由第二组模块代码暴露给第一组模块代码:即使当操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素时,也禁止尝试访问该模块元素的该操作。
在一个或多个实施例中,操作包括反射操作,并且其中为模块元素设置了可访问性覆盖配置。
在一个或多个实施例中,确定模块元素还没有由第二组模块代码暴露给第一组模块代码包括确定该模块元素不是已由第二组模块代码暴露给第一组模块代码的任何一组代码的一部分。
在一个或多个实施例中,操作包括调取模块元素。
在一个或多个实施例中,操作包括修改通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括获得通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括实例化模块元素。
在一个或多个实施例中,禁止操作包括生成与该操作相关联的运行时错误。
在一个或多个实施例中,禁止操作包括生成与该操作相关联的编译时错误。
在一个或多个实施例中,该组步骤还包括:确定第一组模块代码表达需要访问第三组模块代码的第二模块元素的第二操作;确定第二模块元素已由第三组模块代码暴露给第一组模块代码;确定第二模块元素是用非公开修饰符声明的;以及响应于确定以下之一而禁止第二操作的编译或执行:(a)还没有设置用于访问第二模块元素的第二可访问性覆盖配置或(b)第二操作不具有足以访问具有非公开修饰符的任何模块元素的访问级别。
在一个或多个实施例中,该组步骤还包括:确定第一组模块代码表达需要访问第三组模块代码的第二模块元素的第二操作;确定第二模块元素已由第三组模块代码暴露给第一组模块代码;确定第二模块元素是用非公开修饰符声明的;以及响应于确定以下两者而允许第二操作的编译或执行:(a)已经设置用于访问第二模块元素的第二可访问性覆盖配置,以及(b)第二操作与足以访问具有非公开修饰符的模块元素的访问级别相关联。
一个或多个实施例包括由包括硬件处理器的至少一个设备执行的方法。该方法包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作;确定模块元素是否已由第二组模块代码暴露给第一组模块代码;以及响应于确定模块元素还没有由第二组模块代码暴露给第一组模块代码:即使当操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素时,也禁止尝试访问该模块元素的该操作。
在一个或多个实施例中,操作包括反射操作,并且其中为模块元素设置了可访问性覆盖配置。
在一个或多个实施例中,确定模块元素还没有由第二组模块代码暴露给第一组模块代码包括确定该模块元素不是已由第二组模块代码暴露给第一组模块代码的任何一组代码的一部分。
在一个或多个实施例中,操作包括调取模块元素。
在一个或多个实施例中,操作包括修改通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括获得通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括实例化模块元素。
在一个或多个实施例中,禁止操作包括生成与该操作相关联的运行时错误。
在一个或多个实施例中,禁止操作包括生成与该操作相关联的编译时错误。
在一个或多个实施例中,该方法还包括:确定第一组模块代码表达需要访问第三组模块代码的第二模块元素的第二操作;确定第二模块元素已由第三组模块代码暴露给第一组模块代码;确定第二模块元素是用非公开修饰符声明的;以及响应于确定以下之一而禁止第二操作的编译或执行:(a)还没有设置用于访问第二模块元素的第二可访问性覆盖配置或(b)第二操作不具有足以访问具有非公开修饰符的任何模块元素的访问级别。
在一个或多个实施例中,该方法还包括:确定第一组模块代码表达需要访问第三组模块代码的第二模块元素的第二操作;确定第二模块元素已由第三组模块代码暴露给第一组模块代码;确定第二模块元素是用非公开修饰符声明的;以及响应于确定以下两者而允许第二操作的编译或执行:(a)已经设置用于访问第二模块元素的第二可访问性覆盖配置,以及(b)第二操作与足以访问具有非公开修饰符的模块元素的访问级别相关联。
一个或多个实施例包括一种系统,该系统包括至少一个设备,该至少一个设备包括硬件处理器,该系统被配置为执行一组步骤。该组步骤包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作;确定模块元素是否已由第二组模块代码暴露给第一组模块代码;以及响应于确定模块元素还没有由第二组模块代码暴露给第一组模块代码:即使当操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素时,也禁止尝试访问该模块元素的该操作。
一个或多个实施例包括非临时性计算机可读介质,该介质包括指令,该指令在由一个或多个硬件处理器执行时,使得执行一组步骤。该组步骤包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作,其中模块元素是用非公开修饰符声明的。该组步骤还包括:确定模块元素是否已由第二组模块代码暴露给第一组模块代码;确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素;以及响应于确定(a)模块元素已由第二组模块代码暴露给第一组模块代码,以及(b)操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素,并且仅当模块元素已由第二组模块代码暴露给第一组模块代码时:允许操作使用对第一组模块代码可用的可访问性覆盖配置来访问模块元素。
在一个或多个实施例中,确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素是响应于确定该模块元素已由第二组模块代码暴露给第一组模块代码而执行的。
在一个或多个实施例中,操作包括反射操作。
在一个或多个实施例中,操作包括调取模块元素。
在一个或多个实施例中,操作包括修改通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括获得通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括实例化模块元素。
一个或多个实施例包括由包括硬件处理器的至少一个设备执行的方法。该方法包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作,其中该模块元素是用非公开修饰符声明的。该方法还包括:确定模块元素是否已由第二组模块代码暴露给第一组模块代码;确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问所述模块元素;以及响应于确定(a)模块元素已由第二组模块代码暴露给第一组模块代码,以及(b)操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素,并且仅当模块元素已由第二组模块代码暴露给第一组模块代码时:允许操作使用对第一组模块代码可用的可访问性覆盖配置来访问模块元素。
在一个或多个实施例中,确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素是响应于确定该模块元素已由第二组模块代码暴露给第一组模块代码而执行的。
在一个或多个实施例中,操作包括反射操作。
在一个或多个实施例中,操作包括调取所述模块元素。
在一个或多个实施例中,操作包括修改通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括获得通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,所述操作包括实例化模块元素。
一个或多个实施例包括一种系统,该系统包括至少一个设备,该至少一个设备包括硬件处理器,该系统被配置为执行一组步骤。该组步骤包括:识别以第一组模块代码表达的、尝试访问第二组模块代码的模块元素的操作,其中模块元素是用非公开修饰符声明的。该组步骤还包括:确定模块元素是否已由第二组模块代码暴露给第一组模块代码;确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素;以及响应于确定(a)模块元素已由第二组模块代码暴露给第一组模块代码,以及(b)操作使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素,并且仅当模块元素已由第二组模块代码暴露给第一组模块代码时:允许操作使用对第一组模块代码可用的可访问性覆盖配置来访问模块元素。
在一个或多个实施例中,确定操作是否使用对第一组模块代码可用的可访问性覆盖配置来尝试访问模块元素是响应于确定该模块元素已由第二组模块代码暴露给第一组模块代码而执行的。
在一个或多个实施例中,操作包括反射操作。
在一个或多个实施例中,操作包括调取模块元素。
在一个或多个实施例中,操作包括修改通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括获得通过实例化模块元素而创建的对象的值。
在一个或多个实施例中,操作包括实例化模块元素。
7.其它方面;扩展
实施例针对一种系统,该系统具有包括硬件处理器并且被配置为执行本文所述和/或以下权利要求中任何一项所记载的任何操作的一个或多个设备。
在实施例中,非临时性计算机可读存储介质包括指令,该指令在由一个或多个硬件处理器执行时,使得执行本文所述和/或在权利要求中任何一项中所记载的任何操作。
本文所述的特征和功能的任何组合可以根据一个或多个实施例来使用。在前面的说明书中,各种实施例已经参考许多具体细节进行了描述,这些具体细节可以从一种实现到另一种实现而不同。因此,说明书和附图应当在说明性而不是限制性的意义上加以考虑。本发明范围的唯一且排他指示,以及申请人预期要作为本发明范围的是由本申请产生的一组权利要求的、以这种权利要求产生的具体形式的字面和等效范围,包括任何后续的校正。
8.硬件概述
根据一个实施例,本文所描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括诸如被永久性地编程以执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)之类的数字电子设备,或者可以包括被编程为按照固件、存储器、其它存储装置或者其组合中的程序指令来执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程组合来实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑来实现这些技术的任何其它设备。
例如,图6是示出本发明的实施例可以在其上实现的计算机系统600的框图。计算机系统600包括总线602或者用于传达信息的其它通信机制,以及与总线602耦合用于处理信息的硬件处理器604。硬件处理器604可以是例如通用微处理器。
计算机系统600还包括耦合到总线602用于存储信息和要由处理器604执行的指令的主存储器606,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器606还可以用于在要由处理器604执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器604可访问的非临时性存储介质中时,这种指令使计算机系统600变成为被定制以执行指令中所指定的操作的专用机器。
计算机系统600还包括只读存储器(ROM)608或者耦合到总线602的其它静态存储设备,用于为处理器604存储静态信息和指令。提供了存储设备610(诸如磁盘或光盘),并且存储设备610耦合到总线602,用于存储信息和指令。
计算机系统600可以经总线602耦合到诸如阴极射线管(CRT)之类的显示器612,用于向计算机用户显示信息。输入设备614(包括字母数字键和其它键)耦合到总线602,用于向处理器604传达信息和命令选择。另一种类的用户输入设备是游标控件616(诸如鼠标、轨迹球或者游标方向键),用于向处理器604传达方向信息和命令选择并且用于控制显示器612上的游标运动。这种输入设备通常具有在两个轴(第一个轴(例如,x)和第二个轴(例如,y))中的两个自由度,这允许该设备在平面内指定方位。
计算机系统600可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,其中这些定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑与计算机系统相结合,使计算机系统600成为专用机器或者把计算机系统600编程为专用机器。根据一个实施例,本文的技术由计算机系统600响应于执行包含在主存储器606中的一条或多条指令的一个或多个序列的处理器604而执行。这种指令可以从另一存储介质(诸如存储设备610)读到主存储器606中。包含在主存储器606中的指令序列的执行使处理器604执行本文所述的过程步骤。在可替代的实施例中,硬连线的电路系统可以代替软件指令或者与其结合使用。
如在本文所使用的,术语“存储介质”指存储使机器以具体方式操作的数据和/或指令的任何非临时性介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备610。易失性介质包括动态存储器,诸如主存储器606。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或者任何其它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒带。
存储介质与传输介质不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线602的线缆。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外线数据通信中产生的那些。
各种形式的介质可以涉及把一个或多个指令的一个或多个序列携带到处理器604以用于执行。例如,指令最初可以携带于远程计算机的磁盘或固态驱动器上。远程计算机可以把指令加载到它的动态存储器中并且使用调制解调器经电话线发送指令。位于计算机系统600本地的调制解调器可以接收电话线上的数据并且使用红外线发射器把数据转换成红外线信号。红外线检测器可以接收携带在红外线信号中的数据并且适当的电路系统可以把数据放置在总线602上。总线602把数据携带到主存储器606,处理器604从主存储器606检索并执行指令。由主存储器606接收到的指令可以可选地在被处理器604执行之前或之后存储在存储设备610上。
计算机系统600还包括耦合到总线602的通信接口618。通信接口618提供耦合到网络链路620的双向数据通信,其中网络链路620连接到本地网络622。例如,通信接口618可以是综合服务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者提供到对应种类电话线的数据通信连接的调制解调器。作为另一个例子,通信接口618可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任何此类实现中,通信接口618发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
网络链路620通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路620可以通过本地网络622提供到主机计算机624的连接或者到由互联网服务提供商(ISP)626操作的数据装备的连接。ISP 626继而通过现在通常称为“互联网”628的全球分组数据通信网络提供数据通信服务。本地网络622和互联网628两者都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路620上并通过通信接口618的信号是传输介质的示例形式,其中这些信号把数字数据携带到计算机系统600或者携带来自计算机系统600的数字数据。
计算机系统600可以通过(一个或多个)网络、网络链路620和通信接口618发送消息和接收数据,包括程序代码。在互联网示例中,服务器630可以通过互联网628、ISP 626、本地网络622和通信接口618发射所请求的用于应用程序的代码。
接收到的代码可以在代码被接收到时由处理器604执行、和/或存储在存储设备610或其它非易失性存储装置中以用于稍晚执行。
在前面的说明书中,本发明的实施例已经参考许多具体细节进行了描述,这些具体细节可以从一种实现到另一种实现而不同。因此,说明书和附图应当在说明性而不是限制性的意义上加以考虑。本发明范围的唯一且排他指示,以及申请人预期要作为本发明范围的是由本申请产生的一组权利要求的、以这种权利要求产生的具体形式的字面和等效范围,包括任何后续的校正。
Claims (15)
1.一种非暂时性计算机可读介质,所述非暂时性计算机可读介质包括指令,所述指令当由一个或多个硬件处理器执行时,导致执行包括以下各项的步骤:
识别在第一模块中表达的操作,其中所述操作的执行需要访问第二模块的模块元素;
其中,在不存在与所述模块元素相关联的任何模块边界的情况下,与所述模块元素相关联的非特定于模块的可访问性配置控制对所述模块元素的访问;
其中,如果存在与所述模块元素相关联的模块边界并且如果与所述模块元素相关联的所述模块边界允许对所述模块元素的访问,则与所述模块元素相关联的所述非特定于模块的可访问性配置控制对所述模块元素的访问;
确定所述操作与最高可能级别的非特定于模块的访问相关联;
基于与所述模块元素相关联的模块边界确定所述模块元素是否被所述第二模块暴露给所述第一模块;
响应于基于与所述模块元素相关联的模块边界确定所述模块元素未被所述第二模块暴露给所述第一模块:禁止所述操作。
2.如权利要求1所述的介质,其中,编译器和运行时环境中的一个或多个基于(a)与所述模块元素相关联的任何模块化边界和(b)与所述模块元素相关联的所述非特定于模块的可访问性配置来实施对所述模块元素的访问的控制。
3.如权利要求1所述的介质,其中,所述禁止步骤包括以下各项中的一个或多个:
避免编译包含所述第一模块和所述第二模块的一组代码;
避免执行所述操作;
生成与所述操作相关的编译时错误;以及
生成与所述操作相关的运行时错误。
4.如权利要求1所述的介质,其中,所述步骤还包括:
识别在所述第一模块中表达的第二操作,其中该操作的执行需要访问第三模块的第二模块元素;
确定所述第二操作与最高可能级别的非特定于模块的访问相关联;
基于与所述第二模块元素相关联的第二模块边界确定所述第二模块元素是否被所述第三模块暴露给所述第一模块;
响应于基于与所述第二模块元素相关联的第二模块边界确定所述第二模块元素被所述第三模块暴露给所述第一模块:允许所述第二操作。
5.如权利要求1所述的介质,其中,所述模块元素与以下各项中的一个或多个相关联:可访问性覆盖配置和公开修饰符。
6.如权利要求1所述的介质,其中,基于与所述模块元素相关联的模块边界确定所述模块元素是否被所述第二模块暴露给所述第一模块包括:确定与所述第二模块相关联的模块描述符内的声明是否将所述模块元素暴露给所述第一模块。
7.如权利要求1所述的介质,其中,对所述模块元素的访问是至少基于与所述第二模块相关联的模块描述符来控制的。
8.一种非暂时性计算机可读介质,所述非暂时性计算机可读介质包括指令,所述指令当由一个或多个硬件处理器执行时,导致执行包括以下各项的步骤:
识别在第一模块中表达的操作,其中所述操作的执行需要访问第二模块的模块元素,并且其中对所述模块元素的访问是由以下各项控制的:(a)所述模块元素的模块化暴露,和(b)与所述模块元素相关联的非模块化可访问性配置;
确定所述操作与特定级别的非模块化访问相关联,如果对所述模块元素的访问基于所述模块元素的所述模块化暴露是被允许的,则所述特定级别的非模块化访问基于与所述模块元素相关联的非模块化可访问性配置而允许对所述模块元素的访问;
基于所述模块元素的所述模块化暴露确定所述模块元素是否被所述第二模块暴露给所述第一模块;
响应于基于所述模块元素的所述模块化暴露确定所述模块元素未被所述第二模块暴露给所述第一模块:禁止所述操作。
9.如权利要求8所述的介质,其中,编译器和运行时环境中的一个或多个基于(a)所述模块元素的模块化暴露,和(b)与所述模块元素相关联的非模块化可访问性配置,来实施对所述模块元素的访问的控制。
10.如权利要求8所述的介质,其中,所述禁止步骤包括:
避免编译包含所述第一模块和所述第二模块的一组代码;
避免执行所述操作。
11.如权利要求8所述的介质,其中,所述步骤还包括:
识别在所述第一模块中表达的第二操作,其中所述第二操作的执行需要访问第三模块的第二模块元素,并且其中对所述第二模块元素的访问是由以下各项控制的:(a)所述第二模块元素的第二模块化暴露,和(b)与所述第二模块元素相关联的第二非模块化可访问性配置;
确定所述第二操作与第二级别的非模块化访问相关联,如果对所述第二模块元素的访问基于所述第二模块元素的所述第二模块化暴露是被允许的,则所述第二级别的非模块化访问基于与所述第二模块元素相关联的第二非模块化可访问性配置而允许对所述第二模块元素的访问;
基于所述第二模块元素的所述第二模块化暴露确定所述第二模块元素是否被所述第三模块暴露给所述第一模块;
响应于基于所述第二模块元素的所述第二模块化暴露确定所述第二模块元素被所述第三模块暴露给所述第一模块:允许所述第二操作。
12.如权利要求8所述的介质,其中,所述操作是反射操作。
13.一种系统,包括:
包括硬件处理器的至少一个设备;
所述系统被配置为执行如权利要求1-12中任一项所述的步骤。
14.一种方法,包括:
如权利要求1-12中任一项所述的步骤;
其中,所述方法由一个或多个设备执行,每个设备包括硬件处理器。
15.一种包括用于执行如权利要求14所述的方法的部件的装置。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562209878P | 2015-08-25 | 2015-08-25 | |
US62/209,878 | 2015-08-25 | ||
US14/847,800 US10104090B2 (en) | 2015-08-25 | 2015-09-08 | Restrictive access control for modular reflection |
US14/847,833 US10158647B2 (en) | 2015-08-25 | 2015-09-08 | Permissive access control for modular reflection |
US14/847,833 | 2015-09-08 | ||
US14/847,800 | 2015-09-08 | ||
CN201680002642.2A CN107041158B (zh) | 2015-08-25 | 2016-06-14 | 用于模块化反射的限制性访问控制 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680002642.2A Division CN107041158B (zh) | 2015-08-25 | 2016-06-14 | 用于模块化反射的限制性访问控制 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113656008A true CN113656008A (zh) | 2021-11-16 |
Family
ID=58096246
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110980499.7A Pending CN113656008A (zh) | 2015-08-25 | 2016-06-14 | 用于模块化反射的限制性访问控制 |
CN201680002642.2A Active CN107041158B (zh) | 2015-08-25 | 2016-06-14 | 用于模块化反射的限制性访问控制 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680002642.2A Active CN107041158B (zh) | 2015-08-25 | 2016-06-14 | 用于模块化反射的限制性访问控制 |
Country Status (3)
Country | Link |
---|---|
US (3) | US10104090B2 (zh) |
EP (1) | EP3180734B1 (zh) |
CN (2) | CN113656008A (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10146522B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
US10078497B2 (en) | 2015-07-24 | 2018-09-18 | Oracle International Corporation | Bridging a module system and a non-module system |
US9626171B2 (en) * | 2015-07-24 | 2017-04-18 | Oracle International Corporation | Composing a module system and a non-module system |
US10104090B2 (en) | 2015-08-25 | 2018-10-16 | Oracle International Corporation | Restrictive access control for modular reflection |
US10083014B2 (en) | 2015-09-08 | 2018-09-25 | Oracle International Corporation | Generating dynamic modular proxies |
US10140119B2 (en) | 2016-03-17 | 2018-11-27 | Oracle International Corporation | Modular serialization |
US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
US11157641B2 (en) * | 2016-07-01 | 2021-10-26 | Microsoft Technology Licensing, Llc | Short-circuit data access |
US10387142B2 (en) | 2016-09-16 | 2019-08-20 | Oracle International Corporation | Using annotation processors defined by modules with annotation processors defined by non-module code |
US10360008B2 (en) | 2016-09-16 | 2019-07-23 | Oracle International Corporation | Metadata application constraints within a module system based on modular encapsulation |
US10846417B2 (en) * | 2017-03-17 | 2020-11-24 | Oracle International Corporation | Identifying permitted illegal access operations in a module system |
US10848410B2 (en) | 2017-03-29 | 2020-11-24 | Oracle International Corporation | Ranking service implementations for a service interface |
US10120777B1 (en) * | 2017-09-29 | 2018-11-06 | Oracle International Corporation | Remediating serialization incompatibilities |
US10853110B2 (en) * | 2018-07-12 | 2020-12-01 | Oracle International Corporation | Constructor accessibility checks for deserialization |
US11347487B2 (en) * | 2019-06-26 | 2022-05-31 | Oracle International Corporation | Confining reflective access based on module boundaries |
US11221867B2 (en) | 2020-01-02 | 2022-01-11 | International Business Machines Corporation | Resolution of segmented constant pools |
US11568047B2 (en) * | 2020-08-26 | 2023-01-31 | Oracle International Corporation | Distinguished nest-based access control |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192830A1 (en) * | 2006-02-15 | 2007-08-16 | O'connor Dennis M | Security module having access limited based upon security level of code seeking access |
US20110271251A1 (en) * | 2010-04-30 | 2011-11-03 | Oracle International Corporation | Access control in modules for software development |
Family Cites Families (144)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7487507B1 (en) * | 2001-07-18 | 2009-02-03 | City U Research Limited | Secure control transfer in information system |
US6381734B1 (en) | 1998-06-03 | 2002-04-30 | Microsoft Corporation | Method, software and apparatus for referencing a method in object-based programming |
FR2801118B1 (fr) * | 1999-11-17 | 2001-12-21 | Bull Cp8 | Procede de chargement d'applications dans un systeme embarque multi-application, systeme embarque correspondant, et procede d'execution d'une application du systeme embarque |
US7032216B1 (en) | 2000-02-25 | 2006-04-18 | Oracle International Corporation | Native compilation and safe deployment of virtual machine code |
US6986132B1 (en) | 2000-04-28 | 2006-01-10 | Sun Microsytems, Inc. | Remote incremental program binary compatibility verification using API definitions |
US6883163B1 (en) | 2000-04-28 | 2005-04-19 | Sun Microsystems, Inc. | Populating resource-constrained devices with content verified using API definitions |
US6981245B1 (en) * | 2000-09-14 | 2005-12-27 | Sun Microsystems, Inc. | Populating binary compatible resource-constrained devices with content verified using API definitions |
US7177917B2 (en) * | 2000-12-27 | 2007-02-13 | Softwired Ag | Scaleable message system |
US7512935B1 (en) * | 2001-02-28 | 2009-03-31 | Computer Associates Think, Inc. | Adding functionality to existing code at exits |
US6951022B1 (en) * | 2001-03-14 | 2005-09-27 | Microsoft Corporation | Delegate-based event handling |
US7895445B1 (en) * | 2001-04-26 | 2011-02-22 | Nokia Corporation | Token-based remote data access |
US6941547B2 (en) | 2001-06-25 | 2005-09-06 | International Business Machines Corporation | Apparatus and method for porting applications to different platforms |
US20030041238A1 (en) * | 2001-08-15 | 2003-02-27 | International Business Machines Corporation | Method and system for managing resources using geographic location information within a network management framework |
US20030041167A1 (en) * | 2001-08-15 | 2003-02-27 | International Business Machines Corporation | Method and system for managing secure geographic boundary resources within a network management framework |
US20030101381A1 (en) | 2001-11-29 | 2003-05-29 | Nikolay Mateev | System and method for virus checking software |
US7320123B2 (en) * | 2002-04-01 | 2008-01-15 | Sun Microsystems, Inc. | Method and system for detecting deprecated elements during runtime |
AU2003231951A1 (en) | 2002-05-31 | 2003-12-19 | Fujitsu It Holdings, Inc. | Method and system for intelligent storage management |
US20040003079A1 (en) * | 2002-06-21 | 2004-01-01 | Aiu Marcus Tai-Tong | Systems and methods to regulate use of consumer devices and services |
US7228532B1 (en) * | 2002-06-26 | 2007-06-05 | Sun Microsystems, Inc. | Method and apparatus to facilitate code verification and garbage collection in a platform-independent virtual machine |
US7243306B1 (en) | 2002-07-17 | 2007-07-10 | International Business Machines Corporation | Service descriptor for a multitier compute infrastructure |
US7434202B2 (en) | 2002-09-05 | 2008-10-07 | Bea Systems, Inc. | System and method for software component dependency checking |
US7051323B2 (en) * | 2002-10-08 | 2006-05-23 | Sun Microsystems, Inc. | Method and apparatus for initializing romized system classes at virtual machine build time |
US7752599B2 (en) | 2003-02-25 | 2010-07-06 | Bea Systems Inc. | Systems and methods extending an existing programming language with constructs |
US7395540B2 (en) | 2003-03-12 | 2008-07-01 | Microsoft Corporation | Automated business software application integration |
US7360206B1 (en) * | 2003-03-13 | 2008-04-15 | Network Appliance, Inc. | Method for an interpreter to control a native function call based on a signature of the native function |
US7406699B2 (en) | 2003-04-02 | 2008-07-29 | Microsoft Corporation | Enhanced runtime hosting |
CA2434280A1 (en) | 2003-07-03 | 2005-01-03 | Zhong L. Wang | Method and apparatus to guarantee type and initialization safety in multihreaded programs |
US20050055682A1 (en) | 2003-09-08 | 2005-03-10 | Microsoft Corporation | Authoring and using generic classes in JAVA language code |
US7543271B2 (en) * | 2003-09-08 | 2009-06-02 | Microsoft Corporation | Compiling source code using generic classes |
US7503031B2 (en) | 2004-02-19 | 2009-03-10 | International Business Machines Corporation | Method of transforming an application into an on-demand service |
GB2411494B (en) * | 2004-02-27 | 2006-04-12 | Toshiba Res Europ Ltd | Protocol stack with modification facility |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
US7644402B1 (en) | 2004-03-17 | 2010-01-05 | Sun Microsystems, Inc. | Method for sharing runtime representation of software components across component loaders |
US7406687B1 (en) | 2004-03-17 | 2008-07-29 | Sun Microsystems, Inc. | Sharing runtime representation of software component methods across component loaders |
US8291375B2 (en) * | 2004-03-29 | 2012-10-16 | Sybase, Inc. | Attribute-based component programming system and methodology for object-oriented languages |
FR2871590B1 (fr) * | 2004-06-15 | 2006-08-04 | Gemplus Sa | Procede de chargement d'un logiciel en langage intermediaire oriente objet dans un appareil portatif. |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7853947B2 (en) * | 2004-09-30 | 2010-12-14 | Citrix Systems, Inc. | System for virtualizing access to named system objects using rule action associated with request |
JP2006134214A (ja) | 2004-11-09 | 2006-05-25 | Hitachi Ltd | ファイルのバージョン管理方法および計算機システム |
US7490320B2 (en) * | 2005-02-18 | 2009-02-10 | International Business Machines Corporation | Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation |
US7401083B2 (en) * | 2005-05-23 | 2008-07-15 | Goldman Sachs & Co. | Methods and systems for managing user access to computer software application programs |
US7565364B1 (en) | 2005-05-24 | 2009-07-21 | Sun Microsystems, Inc. | Annotation processor discovery |
US7610545B2 (en) | 2005-06-06 | 2009-10-27 | Bea Systems, Inc. | Annotations for tracking provenance |
US20060277456A1 (en) | 2005-06-07 | 2006-12-07 | International Business Machines Corporation | Method for handling annotations |
US7650600B2 (en) * | 2005-06-20 | 2010-01-19 | Microsoft Corporation | Unique identifier resolution interfaces for lightweight runtime identity |
US7669184B2 (en) * | 2005-06-30 | 2010-02-23 | Sun Microsystems, Inc. | Introspection support for local and anonymous classes |
US20070011723A1 (en) * | 2005-07-07 | 2007-01-11 | Ching-Yun Chao | Method for maintaining application compatibility within an application isolation policy |
US8447975B2 (en) * | 2005-07-07 | 2013-05-21 | International Business Machines Corporation | Workstation application server programming protection via classloader policy based visibility control |
US7631011B2 (en) * | 2005-07-29 | 2009-12-08 | Microsoft Corporation | Code generation patterns |
US8082451B2 (en) * | 2005-09-12 | 2011-12-20 | Nokia Corporation | Data access control |
US20070061794A1 (en) | 2005-09-13 | 2007-03-15 | Mausolf Jeffry R | Method and apparatus for classpath optimization in a Java runtime environment |
US7840939B1 (en) | 2006-03-09 | 2010-11-23 | Oracle America, Inc. | Method for managing annotation inheritance |
US7966602B1 (en) | 2006-03-16 | 2011-06-21 | Oracle America, Inc. | Incremental modification detector, and methods, systems, and apparatus for implementing the same |
US8250559B2 (en) | 2006-04-12 | 2012-08-21 | Oracle America, Inc. | Supporting per-program classpaths with class sharing in a multi-tasking virtual machine |
US9053460B2 (en) * | 2006-06-12 | 2015-06-09 | International Business Machines Corporation | Rule management using a configuration database |
US8141035B2 (en) * | 2006-07-05 | 2012-03-20 | International Business Machines Corporation | Method for accessing internal states of objects in object oriented programming |
US10637724B2 (en) * | 2006-09-25 | 2020-04-28 | Remot3.It, Inc. | Managing network connected devices |
US20160344745A1 (en) * | 2006-09-25 | 2016-11-24 | Weaved, Inc. | Method and protocol for secure device deployment using a partially-encrypted provisioning file |
US9231904B2 (en) * | 2006-09-25 | 2016-01-05 | Weaved, Inc. | Deploying and managing networked devices |
US9712486B2 (en) * | 2006-09-25 | 2017-07-18 | Weaved, Inc. | Techniques for the deployment and management of network connected devices |
US8082542B2 (en) * | 2006-10-04 | 2011-12-20 | International Business Machines Corporation | Load time in-lining of subroutines |
US7720931B2 (en) | 2006-10-13 | 2010-05-18 | International Business Machines Corporation | System and method of remotely managing and loading artifacts |
US8214811B2 (en) * | 2006-10-23 | 2012-07-03 | International Business Machines Corporation | Instantiating an interface or abstract class in application code |
US8683453B2 (en) * | 2006-11-30 | 2014-03-25 | Motorola Mobility Llc | System for overriding interpreted byte-code with native code |
US8307337B2 (en) * | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
US8429623B2 (en) * | 2007-01-16 | 2013-04-23 | Oracle America Inc. | Processing engine for enabling a set of code intended for a first platform to be executed on a second platform |
US8352925B2 (en) * | 2007-01-16 | 2013-01-08 | Oracle America, Inc. | Mechanism for enabling a set of code intended for a first platform to be executed on a second platform |
US8745584B2 (en) | 2007-05-03 | 2014-06-03 | International Business Machines Corporation | Dependency injection by static code generation |
FI20070366A0 (fi) * | 2007-05-09 | 2007-05-09 | Webmedia As | Menetelmä ja järjestelmä luokan uudelleen lataamiseksi |
US8490120B2 (en) | 2007-09-12 | 2013-07-16 | Oracle International Corporation | System and method for the service configuration of application server environments |
US8020147B2 (en) | 2007-10-12 | 2011-09-13 | Infosys Limited | Software package implementation sizing |
US8037467B2 (en) * | 2007-10-26 | 2011-10-11 | International Business Machines Corporation | Single stream processing with multi-version support of application operating environments |
US8156477B2 (en) | 2007-11-21 | 2012-04-10 | Oracle America, Inc. | Method and system for assessing virtualization capability of a software application |
US8347266B2 (en) * | 2007-12-10 | 2013-01-01 | Microsoft Corporation | Declarative object identity |
US7934084B2 (en) | 2007-12-21 | 2011-04-26 | Oracle America, Inc. | Method and system for module initialization with an arbitrary number of phases |
US20090249311A1 (en) * | 2008-03-31 | 2009-10-01 | International Business Machines Corporation | Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment |
US8627111B2 (en) * | 2008-04-23 | 2014-01-07 | Hewlett-Packard Development Company, L.P. | Managing associations between keys and values |
US9417931B2 (en) | 2008-06-24 | 2016-08-16 | Microsoft Technology Licensing, Llc | Unified metadata for external components |
US8910257B2 (en) * | 2008-07-07 | 2014-12-09 | Microsoft Corporation | Representing security identities using claims |
US20100138820A1 (en) | 2008-12-01 | 2010-06-03 | Joshi Shrinivas B | Framework for Control Flow-Aware Processes |
US9582394B2 (en) * | 2009-07-30 | 2017-02-28 | Oracle International Corporation | Encapsulating and managing diagnostic information |
US9269060B2 (en) | 2009-11-20 | 2016-02-23 | Oracle International Corporation | Methods and systems for generating metadata describing dependencies for composable elements |
US8627303B2 (en) * | 2009-11-30 | 2014-01-07 | International Business Machines Corporation | Memory optimization of virtual machine code by partitioning extraneous information |
EP2513787A1 (en) * | 2009-12-18 | 2012-10-24 | Syddansk Universitet | Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software |
US8464208B2 (en) | 2010-03-26 | 2013-06-11 | Oracle International Corporation | Capturing and utilizing specific module dependency information |
US9229709B2 (en) | 2010-04-30 | 2016-01-05 | Oracle International Corporation | Polyphasic modules for software development |
US20110302565A1 (en) | 2010-06-07 | 2011-12-08 | Ferris Michael S | Implicit workspace dependencies |
US8584104B2 (en) * | 2010-06-25 | 2013-11-12 | Oracle International Corporation | Compile-time management of polyphasic modules |
US8813049B2 (en) * | 2010-06-30 | 2014-08-19 | Oracle International Corporation | Type inference of partially-specified parameterized types |
US9047576B2 (en) | 2010-08-09 | 2015-06-02 | Oracle International Corporation | Mechanism to communicate and visualize dependencies between a large number of flows in software |
US9116707B2 (en) * | 2010-10-18 | 2015-08-25 | Oracle International Corporation | Dependency resolution in polyphasic modules |
US9454360B2 (en) * | 2010-11-04 | 2016-09-27 | Oracle International Corporation | Characterizing interface evolution and consumer roles in module systems |
EP2649522B1 (fr) * | 2010-12-06 | 2020-04-01 | Google LLC | Methode de mise a disposition d'une application en tant que librairie dans une machine virtuelle |
US8793708B2 (en) | 2010-12-08 | 2014-07-29 | Microsoft Corporation | Creation and termination of component scopes |
US9575908B2 (en) * | 2011-02-08 | 2017-02-21 | Diablo Technologies Inc. | System and method for unlocking additional functions of a module |
US8782644B2 (en) * | 2011-02-15 | 2014-07-15 | Oracle International Corporation | Preventing unsafe sharing through confinement of mutable captured variables |
US9465627B2 (en) * | 2011-02-15 | 2016-10-11 | Oracle International Corporation | Binding-based characterization of closures in software programs |
US20120278797A1 (en) | 2011-02-21 | 2012-11-01 | Randy Kent Secrist | Methods and systems for packaging encapsulated operating system and custom software for single stream multi-system installation |
US9170825B2 (en) * | 2011-04-21 | 2015-10-27 | Oracle International Corporation | Interface method resolution for virtual extension methods |
US8955037B2 (en) * | 2011-05-11 | 2015-02-10 | Oracle International Corporation | Access management architecture |
US8650537B2 (en) * | 2011-05-30 | 2014-02-11 | International Business Machines Corporation | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods |
US8875161B2 (en) * | 2011-06-08 | 2014-10-28 | The Mathworks, Inc. | Methods and systems for setting access to a list of class entities |
US8640094B2 (en) | 2011-07-01 | 2014-01-28 | International Business Machines Corporation | Building optimized download modules leveraging modularized dependencies |
US9043866B2 (en) * | 2011-11-14 | 2015-05-26 | Wave Systems Corp. | Security systems and methods for encoding and decoding digital content |
US9361070B1 (en) * | 2012-01-27 | 2016-06-07 | Andrew Nuss | Compiling regular expression side-effects to java or C# code |
US8813031B2 (en) | 2012-03-02 | 2014-08-19 | Oracle International Corporation | System and method for automatically resolving dependencies of Java Archive files for use with Maven |
JP5774773B2 (ja) | 2012-03-30 | 2015-09-09 | 株式会社カプコン | コンピュータ装置、コンピュータプログラム、ゲームシステム、及び制御方法 |
US9639329B2 (en) * | 2012-06-15 | 2017-05-02 | Syddansk Universitet | System and method for automatic invocation of constructor code for superclasses |
US9128789B1 (en) | 2012-07-31 | 2015-09-08 | Google Inc. | Executing cross-cutting concerns for client-server remote procedure calls |
US9032376B2 (en) | 2012-09-28 | 2015-05-12 | Synopsys, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US9275223B2 (en) * | 2012-10-19 | 2016-03-01 | Mcafee, Inc. | Real-time module protection |
US9280676B2 (en) | 2012-11-13 | 2016-03-08 | Sap Se | Development of business applications |
US9069568B2 (en) | 2012-12-19 | 2015-06-30 | International Business Machines Corporation | Compilation dependency resolution from a diverse group of candidate resources |
US11347498B2 (en) * | 2013-02-26 | 2022-05-31 | Red Hat, Inc. | Bytecode modification |
US9652207B2 (en) | 2013-03-13 | 2017-05-16 | Microsoft Technology Licensing, Llc. | Static type checking across module universes |
AU2013205576B1 (en) | 2013-04-12 | 2014-03-27 | Commonwealth Bank Of Australia | Dynamically loadable composite software application |
US8990839B2 (en) * | 2013-04-22 | 2015-03-24 | Microsoft Technology Licensing, Llc | Controlling runtime access to application programming interfaces |
US9298448B2 (en) | 2013-05-21 | 2016-03-29 | Red Hat, Inc. | System and method for run time dependency resolution |
US9519795B2 (en) * | 2013-05-28 | 2016-12-13 | Unisys Corporation | Interconnect partition binding API, allocation and management of application-specific partitions |
US10402194B2 (en) | 2013-09-20 | 2019-09-03 | Infosys Limited | Systems and methods for extracting cross language dependencies and estimating code change impact in software |
CN104516730B (zh) | 2013-09-29 | 2017-11-10 | 国际商业机器公司 | 一种数据处理方法和装置 |
CN104765620B (zh) | 2014-01-02 | 2018-01-26 | 国际商业机器公司 | 一种程序模块部署的方法和系统 |
US9323501B1 (en) | 2014-02-24 | 2016-04-26 | Tibco Software Inc. | Modularized XML namespaces |
US20160055344A1 (en) * | 2014-04-10 | 2016-02-25 | Mocana Corporation | Data loss prevention during app execution using e-mail enforcement on a mobile device |
US9336018B2 (en) | 2014-05-02 | 2016-05-10 | Oracle International Corporation | Mechanism for class data sharing using extension and application class-loaders |
US10261764B2 (en) * | 2014-05-13 | 2019-04-16 | Oracle International Corporation | Handling value types |
US10540148B2 (en) * | 2014-06-12 | 2020-01-21 | Oracle International Corporation | Complex constants |
US9977654B2 (en) | 2014-06-20 | 2018-05-22 | Asset, S.r.L. | Method of developing an application for execution in a workflow management system and apparatus to assist with generation of an application for execution in a workflow management system |
US9286085B2 (en) * | 2014-06-27 | 2016-03-15 | International Business Machines Corporation | Correlating class loader objects across execution environments |
US11030105B2 (en) * | 2014-07-14 | 2021-06-08 | Oracle International Corporation | Variable handles |
US10324741B2 (en) * | 2014-08-30 | 2019-06-18 | Oracle International Corporation | Speeding up dynamic language execution on a virtual machine with type speculation |
US10114745B2 (en) * | 2014-10-07 | 2018-10-30 | Red Hat, Inc. | Assisted garbage collection in a virtual machine |
US9098715B1 (en) * | 2014-10-28 | 2015-08-04 | Openpeak Inc. | Method and system for exchanging content between applications |
US10452857B2 (en) * | 2014-11-07 | 2019-10-22 | Cyber Reliant Corporation | Systems and methods for providing file level security |
US9996680B2 (en) * | 2015-01-18 | 2018-06-12 | F. Scott Deaver | Methods and related apparatus for managing access to digital assets |
US20160232017A1 (en) * | 2015-02-10 | 2016-08-11 | ZeroTurnaround AS | System and Method for Reloading Constructors |
US9292315B1 (en) | 2015-03-16 | 2016-03-22 | International Business Machines Corporation | Sharing of classes for modular programs in a multi-tenant environment |
US10564943B2 (en) * | 2015-06-08 | 2020-02-18 | Oracle International Corporation | Special calling sequence for caller-sensitive methods |
US10078497B2 (en) * | 2015-07-24 | 2018-09-18 | Oracle International Corporation | Bridging a module system and a non-module system |
US9626171B2 (en) * | 2015-07-24 | 2017-04-18 | Oracle International Corporation | Composing a module system and a non-module system |
US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
US10104090B2 (en) | 2015-08-25 | 2018-10-16 | Oracle International Corporation | Restrictive access control for modular reflection |
US10083014B2 (en) | 2015-09-08 | 2018-09-25 | Oracle International Corporation | Generating dynamic modular proxies |
US10140119B2 (en) | 2016-03-17 | 2018-11-27 | Oracle International Corporation | Modular serialization |
-
2015
- 2015-09-08 US US14/847,800 patent/US10104090B2/en active Active
- 2015-09-08 US US14/847,833 patent/US10158647B2/en active Active
-
2016
- 2016-06-14 CN CN202110980499.7A patent/CN113656008A/zh active Pending
- 2016-06-14 CN CN201680002642.2A patent/CN107041158B/zh active Active
- 2016-06-14 EP EP16733790.6A patent/EP3180734B1/en active Active
-
2018
- 2018-08-23 US US16/110,670 patent/US10367822B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192830A1 (en) * | 2006-02-15 | 2007-08-16 | O'connor Dennis M | Security module having access limited based upon security level of code seeking access |
US20110271251A1 (en) * | 2010-04-30 | 2011-11-03 | Oracle International Corporation | Access control in modules for software development |
Also Published As
Publication number | Publication date |
---|---|
CN107041158A (zh) | 2017-08-11 |
US10367822B2 (en) | 2019-07-30 |
EP3180734B1 (en) | 2022-09-14 |
US10104090B2 (en) | 2018-10-16 |
EP3180734A1 (en) | 2017-06-21 |
US20170063874A1 (en) | 2017-03-02 |
US10158647B2 (en) | 2018-12-18 |
CN107041158B (zh) | 2021-09-17 |
US20190028483A1 (en) | 2019-01-24 |
US20170061148A1 (en) | 2017-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107041158B (zh) | 用于模块化反射的限制性访问控制 | |
US11385872B2 (en) | Extending a virtual machine instruction set architecture | |
US11599346B2 (en) | Accessing a migrated member in an updated type | |
US11366643B2 (en) | Generating dynamic modular proxies | |
US11922238B2 (en) | Accessing a parametric field within a specialized context | |
US10846417B2 (en) | Identifying permitted illegal access operations in a module system | |
US10360008B2 (en) | Metadata application constraints within a module system based on modular encapsulation | |
WO2017034652A1 (en) | Restrictive access control for modular reflection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |