ES2305316T3 - Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado. - Google Patents

Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado. Download PDF

Info

Publication number
ES2305316T3
ES2305316T3 ES02782563T ES02782563T ES2305316T3 ES 2305316 T3 ES2305316 T3 ES 2305316T3 ES 02782563 T ES02782563 T ES 02782563T ES 02782563 T ES02782563 T ES 02782563T ES 2305316 T3 ES2305316 T3 ES 2305316T3
Authority
ES
Spain
Prior art keywords
files
file
class
cod
information
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.)
Expired - Lifetime
Application number
ES02782563T
Other languages
English (en)
Inventor
Gregory R. Bentz
John F. A. Dahms
David P. Yach
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BlackBerry Ltd
Original Assignee
Research in Motion Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Research in Motion Ltd filed Critical Research in Motion Ltd
Application granted granted Critical
Publication of ES2305316T3 publication Critical patent/ES2305316T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Warehouses Or Storage Devices (AREA)
  • Television Signal Processing For Recording (AREA)
  • Peptides Or Proteins (AREA)
  • Debugging And Monitoring (AREA)
  • Transceivers (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Electrotherapy Devices (AREA)
  • Electrically Operated Instructional Devices (AREA)
  • Navigation (AREA)

Abstract

Un dispositivo (400), que comprende: una unidad de memoria (404); una unidad de computación (402) conectada a la unidad de memoria (404), siendo capaz la unidad de computación (404) de ejecutar una Máquina Virtual Java; y uno o más ficheros (406) almacenados en la unidad de memoria (404), siendo el o los ficheros directamente interpretables por la Máquina Virtual Java, siendo generados el o los ficheros (406) a partir de una pluralidad de ficheros de clase (100A-100F) para reducir el espacio de almacenamiento, en el que un fichero dado (200) del o de los ficheros (406), comprende: una bolsa (202) de constantes, creada combinando entradas de bolsa de constantes de dos o más (100A, 100B) de la pluralidad de ficheros de clase (100A-100F) sin duplicación de entradas; una estructura (204) de información y de códigos de bytes creada combinando entradas de estructura de información y de códigos de bytes de los dos o más (100A, 100B) de la pluralidad de ficheros de clase (100A-100F); y una tabla de organización (208) para proporcionar información a la Máquina Virtual Java para resolver al menos una entrada del fichero dado en el momento del enlace.

Description

Método para generar un código interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado.
Antecedentes del invento
Los ficheros en código fuente Java (ficheros java) son compilados para obtener ficheros con extensión ".class" mediante el compilado Java. Estos ficheros con extensión ".class" pueden ser leídos en memoria mediante la máquina virtual Java (VM) en un formato "en memoria" que resulta adecuado para ser interpretado por la VM. Los ficheros con extensión ".class" son luego enlazados con otros ficheros con extensión ".class" que han sido leídos en forma similar. Las referencias entre los ficheros ".class" se resuelven simbólicamente, utilizando cadenas de caracteres. Estas cadenas de caracteres aparecen tanto en el fichero ".class" que contiene la definición como en el fichero ".class" que hace referencia a la definición. Por tanto, la presencia de referencias entre ficheros ".class" puede incrementar el tamaño de los mismos.
Las ficheros Java ".class" pueden archivarse (y, opcionalmente, comprimirse) en un fichero con extensión ".jar". Sin embargo, los ficheros ".jar" no son directamente interpretables por la VM Java y los ficheros ".class" deben extraerse (y descomprimirse, de ser aplicable) del fichero ".jar" (y leerse en la memoria) con el fin de que puedan ser enlazados, resueltos e interpretados por la VM Java.
Si bien los ficheros ".jar" que comprenden ficheros ".class" archivados y comprimidos son menores que los propios ficheros ".class" (y, por tanto, son más adecuados para ser transmitidos entre dispositivos de comunicación), es necesario disponer, en el entorno donde ha de ejecutarse la aplicación, de espacio de almacenamiento para los ficheros ".class" extraídos (y descomprimidos, si ha lugar), de manera que la VM Java pueda acceder a los ficheros ".class". En consecuencia, una solución que incluya ficheros ".jar" puede no representar un ahorro de espacio de almacenamiento. De hecho, una solución que incluya ficheros ".jar" puede exigir espacio adicional para almacenamiento, tanto para los ficheros ".jar" como para los ficheros ".class" extraídos. Los ficheros ".class" extraídos no tienen que conservarse una vez que han sido cargados en memoria, enlazados y resueltos. Sin embargo, deben conservarse tanto el fichero ".jar" como las representaciones en memoria de los ficheros ".class". En un entorno con un espacio de almacenamiento limitado, cuando éste escasea, puede ser preferible, por tanto, almacenar sólo los ficheros ".class" y no utilizar una solución que incluya ficheros ".jar". Sin embargo, como se ha explicado en lo que antecede, el tamaño de los ficheros ".class" aumenta cuando aumenta el número de referencias entre ficheros ".class".
El documento US2002/0170047 (Swetland) publicado el 14 de Noviembre de 2002, describe un objeto de programación unificado que tiene una bolsa de constantes compartida con entradas a la bolsa de constantes global correlacionadas respecto de entradas a la bolsa de constantes local de dos o más ficheros de clase, y una pluralidad de copias de código objeto de dos o más ficheros de clase al objeto de programación unificado e identificadas por las entradas a la bolsa de constantes global.
La solicitud de patente PCT WO 99/49392 (Baentsch y otros) publicada el 30 de Septiembre de 1999, describe un sistema Java en tiempo de ejecución que comprende un interpretador basado en pilas que ejecuta un programa que comprende códigos de bytes y estructuras de clase. El sistema comprende, además, una bolsa de constantes modificada con información interna de uso sólo durante el enlace y con información externa a conservar para ulterior asociación de códigos. La información interna es retirada de la bolsa de constantes modificada tras el enlace.
Por tanto, sería beneficioso generar ficheros directamente interpretables que tuvieran un tamaño similar al de los ficheros ".class", al tiempo que se proporciona una solución a las referencias entre ficheros ".class".
Exposición general
En un aspecto, una realización del invento proporciona un dispositivo que comprende: una unidad de memoria; una unidad de computación conectada a la unidad de memoria, siendo capaz la unidad de computación de ejecutar una Máquina Virtual Java; y uno o más ficheros almacenados en la unidad de memoria, siendo el o los ficheros directamente interpretables por la Maquina Virtual Java, siendo generados el o los ficheros a partir de una pluralidad de ficheros de clase para reducir el espacio de almacenamiento, en el que un fichero dado del o de los ficheros mencionados, comprende: una bolsa de constantes creada por combinación de entradas de bolsa de constantes de dos o más de la pluralidad de ficheros de clase sin que exista duplicación de entradas; una estructura de información y de códigos de bytes creada combinando entradas de la estructura de información y de códigos de bytes a partir de los dos o más ficheros mencionados de la pluralidad de ficheros de clase; y una tabla de organización para proporcionar información a la Máquina Virtual Java para resolver al menos una entrada en el fichero dado en el momento del enlace.
En otro aspecto, una realización del invento proporciona un método para generar uno o más ficheros a partir de una pluralidad de ficheros de clase, comprendiendo el método: identificar los ficheros de clase con entradas comunes en bolsas de constantes de los ficheros de clase; generar una bolsa de constantes para un fichero generado dado combinando entradas de bolsa de constantes procedentes de los ficheros de clase con entradas comunes sin duplicación; generar la estructura de información y códigos de bytes para el fichero generado dado combinando entradas de la estructura de información y los códigos de bytes procedentes de los ficheros de clase; y generar una tabla de organización para proporcionar información a una Máquina Virtual Java para resolver, al menos, una entrada en el fichero dado en el momento del enlace.
En todavía otro aspecto, una realización del invento proporciona un producto de programa de ordenador para generar uno o más ficheros a partir de una pluralidad de ficheros de clase, combinando elementos procedentes de la pluralidad de ficheros de clase sin duplicación de entradas a fin de reducir el espacio de almacenamiento, comprendiendo el producto de programa de ordenador un medio legible por ordenador que incorpora medios de código de programa ejecutables mediante un procesador de una unidad de computación para llevar a la práctica el método del invento.
Breve descripción de los dibujos
La materia considerada como objeto del invento se señala particularmente y se reivindica en forma distintiva en la parte de las conclusiones de la memoria descriptiva. Sin embargo, el invento, tanto en lo que respecta a la organización como en lo que atañe al método de trabajo, junto con sus objetos, características y ventajas, puede comprenderse del mejor modo haciendo referencia a la siguiente descripción detallada cuando se lee en conjunto con los dibujos anejos, en los que:
las figs. 1A y 1B son ilustraciones simplificadas de la técnica anterior de seis ficheros ".class" ilustrativos;
las figs. 2A y 2B son ilustraciones simplificadas de ficheros con extensión ".cod" ilustrativos, de acuerdo con algunas realizaciones del presente invento;
la fig. 3 es una ilustración, en forma de gráfico de flujo, de un método para generar ficheros ".cod" de acuerdo con algunas realizaciones del presente invento; y
la fig. 4 es una ilustración, en forma de diagrama de bloques simplificado de un dispositivo que tiene una unidad de computación y una memoria directamente accesible, de acuerdo con algunas realizaciones del presente invento.
\vskip1.000000\baselineskip
Se apreciará que, para simplificar y por claridad de la ilustración, los elementos mostrados en las figuras no se han dibujado, necesariamente, a escala. Por ejemplo, por claridad, las dimensiones de algunos de los elementos pueden ser exageradas con relación a las de otros elementos. Además, cuando se considera apropiado, los números de referencia pueden repetirse en diversas figuras para indicar elementos correspondientes o análogos.
Descripción de las realizaciones preferidas
En la siguiente descripción detallada, se describen numerosos detalles específicos con el fin de proporcionar una total comprensión del invento. Sin embargo, los expertos normales en la técnica comprenderán que el presente invento puede ser llevado a la práctica en ausencia de estos detalles específicos. En otros casos, no se han descrito con detalle métodos, procedimientos ni componentes bien conocidos para no disminuir la claridad del presente invento.
Los ficheros de código fuente Java (ficheros con extensión ".java") se compilan para obtener ficheros con extensión ".class" mediante el compilador Java. Estos ficheros ".class", una vez leídos a memoria, pueden ser enlazados, resueltos e interpretados por la Máquina Virtual (VM) Java. Las figs. 1A y 1B son ilustraciones simplificadas de la técnica anterior de seis ficheros ".class" ilustrativos -fichero 100 Aa.class, fichero 100B Bb.class, fichero 100C Cc.class, fichero 100D Dd.class, fichero 100E Ee.class y fichero 100F Ff.clas- a los que se hará referencia, en forma colectiva, como fichero 100.
La estructura del fichero ".class" está bien documentada y no se describirá con detalle en este documento. El fichero 100 se ilustra en formato simplificado en aras de la claridad de la explicación; sin embargo, los expertos normales en la técnica comprenderán que este formato simplificado no constituye una representación exacta de la estructura del fichero 100. Cada fichero 100 comprende una bolsa de constantes 102. La bolsa 102 de constantes comprende entradas cp_info indexadas, algunas de las cuales comprenden cadenas de caracteres que indican los nombre de los ficheros ".class" y ".class" padre, los nombres de métodos, el tipo de métodos, los nombres de campos, el tipo de campos, etc., con referencia al interior de la estructura ClassFile (fichero de clase). Cada fichero 100 comprende, también, "estructuras de información y códigos de bytes" 104 relacionadas con las propiedades de la clase, los métodos, campos y atributos de la clase y sus tipos. Estas estructuras pueden señalar a entradas de la bolsa de constantes 102 utilizando números de índice ordinales.
En el fichero 100 Aa.class, el método G incluye una referencia a otro método, el método K, encontrado en la clase Bb. De hecho, el método G se define en el fichero ".class" como una estructura method_info (método_información) que comprende, entre otras cosas, índices de entradas en la bolsa de constantes 102A. Sin embargo, por claridad de la descripción, la definición del método G y su referencia al método K se muestran en la fig. 1A en un formato simplificado. Por tanto, las cadenas de caracteres "K" y "Bb" se incluyen en la bolsa de constantes 102A. La inclusión de "K" y "bb" en la bolsa de constantes 102A aparece, realmente, como parte de varias estructuras cp_info. Sin embargo, por claridad de la descripción solamente, las cadenas de caracteres "K" y "Bb" se ilustran en la fig. 1A. Como el argumento del método K es de tipo entero, el carácter "I" BaseType (tipo de base) se incluye en la bolsa de constantes 102A. La referencia simbólica al método K por el método G en las estructuras de información y códigos de bytes 104A comprende los índices de las estructuras cp_info pertinentes en la bolsa de constantes 102A.
Similarmente, en el fichero 100B Bb.class, el método K se define en la clase Bb, de modo que la bolsa de constantes 102B incluye todas las cadenas "Bb", "K" y el carácter "I" BaseType (que representa el tipo "int").
Las figs. 2A y 2B son ilustraciones simplificadas de ficheros ".cod" ilustrativos, cuya generación se describirá en lo que sigue con respecto a la fig. 3. Los ficheros ".cod" son ficheros directamente interpretables que comprenden la información de los ficheros ".class" en una manera que requiere menos espacio de almacenamiento que los propios ficheros ".class". Los ficheros ".cod" pueden ser ficheros ".cod" "sólo" o ficheros ".cod" "hermanos", como se explicará con mayor detalle en lo que sigue.
En el ejemplo mostrado en la fig. 2B el fichero ".cod" sólo 220 se denomina "EeFf.cod" para indicar que es el resultado de combinar los ficheros Ee.class y Ff.class, si bien el alcance del presente invento no está limitado a este aspecto. El fichero EeFf.cod sólo 220 comprende una bolsa de constantes 222, una o más tablas de organización 228 y "estructuras de información y de códigos de bytes" 224 relativas a las propiedades de la clase, los métodos, campos y atributos de la clase, y sus tipos.
La fig. 3 es una ilustración en forma de diagrama de flujo simplificada de un método para la generación de ficheros ".cod" a partir de una colección de ficheros ".java" o de ficheros ".class". El método puede ser llevado a la práctica mediante software ejecutable en un ordenador para uso general, estando provisto el software, por ejemplo, como parte de un kit de desarrollador de software (SDK).
Se recibe una lista de ficheros ".java" o de ficheros ".class" (paso 300). Si la entrada consiste en ficheros ".java", entonces se aplica un compilador Java a los mismos para producir los correspondientes ficheros ".class" (paso 302). Alternativamente, aunque esto no se muestra en la fig. 3, podrían recibirse uno o más ficheros ".jar" y, a partir de ellos, podría extraerse información relativa a los ficheros ".class" archivados.
El software ejecutable identifica las entradas comunes de las bolsas de constantes de los ficheros ".class" (paso 304). Por ejemplo, en la fig. 1B, la cadena de caracteres del nombre de la clase madre "java/lang/Object" (java/leng/Objeto), la cadena de caracteres "T" del nombre del método y el carácter "C" BaseType (Tipo de base) (que representa el tipo "char" (carácter)) son comunes al fichero 100E Ee.class y al fichero 100F Ff.class.
El software ejecutable identifica las referencias cruzadas entre clases, métodos y campos en los ficheros ".class" (paso 306). Por ejemplo, en la fig. 1B, al método Ee.T se hace referencia a través de método Ff.U.
El software ejecutable genera entonces el fichero ".cod" combinando elementos de los ficheros ".class" (paso 308). A diferencia de los algoritmos de compresión estándar que comprimen los datos independientemente de su contenido, la combinación de elementos de los ficheros ".class" en el fichero ".cod" se realiza de forma diferente basándose en el tipo de elemento y en su contenido. Por ejemplo, el fichero ".cod" comprende una bolsa de constantes cuyas entradas incluyen la información almacenada en las bolsas de constantes de los ficheros ".class", pero sin duplicaciones de entradas redundantes. En el fichero ".cod" generado, la bolsa de constantes contiene, únicamente, una sola copia de las entradas comunes identificadas en el paso 304. Por ejemplo, en la fig. 2B, la bolsa de constantes 222 del fichero EeFf.cod sólo comprende únicamente una instancia de cadenas de caracteres "java/lang/Object" y "T" y una instancia del carácter "C" BaseType.
El software ejecutable utiliza desplazamientos fijos en el fichero ".cod" sólo generado para referencias cruzadas entre clases y métodos definidos en los ficheros ".class" que se combinan. Por ejemplo, en la fig. 2B, la referencia al método Ee.T por el método Ff.U en las "estructuras de información y códigos de bytes" 224 comprende un desplazamiento fijo, HO_{Ee.T}, que especifica la situación de la definición del método Ee.T dentro del fichero EeFf.cod sólo 220. Este desplazamiento fijo no tiene que ser resuelto ni puesto en contexto por la VM Java en el momento del enlace.
El uso, anteriormente descrito, de un desplazamiento fijo en un fichero ".cod" puede contrastarse con el uso de desplazamientos en ficheros ".DLL" de Windows^{MR}. Las referencias en los ficheros ".DLL" de Windows^{MR} pueden ser en términos de un nombre simbólico o un número ordinal. El número ordinal se utiliza como índice en una tabla de desplazamientos. Las realizaciones del presente invento utilizan los desplazamientos fijos directamente en el fichero ".cod", proporcionando una representación más compacta. Además, los ficheros ".DLL" de Windows^{MR}. son utilizados para código compilado, mientras que los ficheros ".cod" son utilizados para Java interpretado.
El software ejecutable utiliza referencias simbólicas en el fichero ".cod" sólo generado para referencias cruzadas entre las clases recibidas en el paso 300 y otras clases. En el presente ejemplo, la clase E y la clase Ff amplían la clase java.lang.Object. Por tanto, cada una de las bolsas de constantes 102E, 102F y 222, comprende una única instancia de nombre de clase "java/lang/Object" de forma que las definiciones de las clases pueden hacer referencia a esta clase madre. En el fichero Eeff.cod sólo 220, la bolsa 222 de constantes comprende la cadena "java/lang/Object", y la referencia a la clase java.lang.Object en las definiciones de las clases en las "estructuras de información y códigos de bytes" 224 es una referencia simbólica (utilizando el índice de la cadena en la bolsa 222 de constantes) que ha de ser resuelta por la VM Java en el momento del enlace utilizando información almacenada en la tabla de organización 228.
El software ejecutable puede llevar a cabo acciones adicionales que no se han ilustrado en la fig. 3, Por ejemplo, pueden utilizarse otras técnicas de ahorro de espacio para reducir aún más el tamaño de los ficheros ".cod" sólo.
Los expertos normales en la técnica apreciarán que cuando se modifican los ficheros de código fuente Ee.java y Ff.java, es necesario invocar al software ejecutable para generar un nuevo fichero EeFf.cod o, alternativamente, invocar al software ejecutable en los ficheros java modificados o ".class" junto con uno o más ficheros ".java" o ".class" adicionales, para generar un nuevo fichero EeFfxxx.cod, donde "x" indica las clases adicionales.
Los expertos normales en la técnica también apreciarán que si fuese posible generar un único fichero ".cod" sólo para todos los ficheros ".class" a utilizar en una aplicación particular, entonces la VM Java no necesitaría resolver referencias simbólicas entre clases, métodos y campos, ya que tales referencias aparecerían en el fichero ".cod" como desplazamientos fijos. Además, tal fichero ".cod" podría ser significativamente más pequeño que el tamaño total de los ficheros ".class", ya que en el fichero ".cod" se eliminarían las duplicaciones de información de los ficheros ".class". Tal fichero ".cod" único será, también, más pequeño que los múltiples ficheros ".cod" sólo debido a la reducción de la información duplicada.
Sin embargo, a diferencia de los ficheros ".DLL" de Windows^{MR}. que tienen un tamaño relativamente ilimitado, en ocasiones existen limitaciones importantes sobre el tamaño de un único fichero ".cod". Por ejemplo, la fig. 4 muestra un dispositivo 400 que comprende una unidad de computación 402 capaz de ejecutar una VM Java y una memoria 404 directamente accesible que tiene uno o más ficheros ".cod" 406 almacenados en ella. Si bien el alcance del presente invento no se limita a este aspecto, la unidad de computación 402 puede ser un microprocesador para uso general o cualquier unidad de computación capaz de ejecutar una VM Java, y el dispositivo 400 puede ser una cámara digital, una grabadora de vídeo portátil, un teléfono celular, un asistente digital personal, un ordenador portátil, un reproductor de MP3, un reproductor de CD, un dispositivo de juegos portátil, un avisador telefónico, un avisador telefónico bidireccional, etc. Aunque el alcance del presente invento no está limitado en este aspecto, la memoria 404 directamente accesible puede ser una memoria relámpago No-O (NOR) cuyo esquema físico imponga un límite superior de 64 Kb al tamaño de cada fichero ".cod" almacenado en ella.
Si hubiese de almacenarse una aplicación exclusivamente como ficheros ".cod" sólo en un medio de almacenamiento que impusiese un límite sobre el tamaño de los ficheros ".cod" individuales, entonces cada fichero ".cod" comprendería, probablemente, muchas referencias simbólicas a cuenta de las referencias cruzadas entre clases en esos ficheros ".cod" y clases en otros ficheros ".cod" sólo. Como las referencias simbólicas requieren más espacio de almacenamiento en el fichero ".cod" que los desplazamientos fijos, el tamaño global de la representación ".cod" sólo de la aplicación puede ser muy grande.
Como alternativa al uso exclusivo de ficheros ".cod" sólo en la representación de una aplicación, pueden utilizarse ficheros ".cod" hermanos cuando los ficheros ".cod" han de almacenarse en un medio de almacenamiento que imponga un límite sobre el tamaño de los ficheros ".cod" individuales. El desarrollador de software puede agrupar juntos ficheros ".java" o ficheros ".class" en grupos hermanos. Este agrupamiento puede basarse en el conocimiento del desarrollador de software sobre lo intrincado de las referencias cruzadas entre las clases representadas en los ficheros. A partir de estos ficheros ".java" o ".class" puede generarse un fichero ".cod" y, si después de haberse combinado parte de los ficherois ".java" o de los ficheros ".class" en un fichero ".cod", el tamaño de éste superase un limite predeterminado, y hubiese de combinarse otro fichero ".java" u otro fichero ".class" en el fichero ".cod", entonces se crearían uno o más ficheros ".cod" hermanos para los restantes ficheros ".java" o ".class" del grupo de hermanos. Las clases no cruzan los límites de los ficheros ".cod" dividiéndose.
Los expertos normales en la técnica apreciarán que para un grupo dado de ficheros ".class", el empaquetamiento de los ficheros ".class" en dos ficheros ".cod" hermanos constituirá una representación más compacta que el empaquetamiento de los ficheros ".class" en tres ficheros ".cod" hermanos. Por tanto, es deseable empaquetar los ficheros ".class" del grupo en tan pocos ficheros ".cod" como sea posible, manteniendo al tiempo la restricción de tamaño de los ficheros ".cod" individuales. El problema de cómo dividir un grupo de clases con referencias cruzadas entre ficheros ".cod" hermanos es similar al bien conocido "problema de empaquetado" en la técnica de la ingeniería de software. Pueden utilizarse diversas técnicas para reducir al mínimo el tamaño global de la representación ".cod" de una aplicación.
La fig. 2A es una ilustración simplificada de dos ficheros ".cod" ilustrativos de acuerdo con algunas realizaciones del presente invento. Un fichero ".cod" hermano 200 recibe el nombre de "AaBb.cod" para indicar que es el resultado de combinar los ficheros Aa.class y Bb.class, aunque el alcance del presente invento no se limita a este aspecto. Similarmente, un fichero ".cod" hermano 210 recibe el nombre de "CcDd.cod" para indicar que es el resultado de combinar los ficheros Cc.class y Dd.class.
Cada fichero ".cod" hermano comprende una lista de sus hermanos. Por ejemplo, una lista 206 de hermanos del fichero ".cod" AaBb.cod 200 comprende "CcDd" para indicar que el fichero CcDd.cod 210 es un hermano del fichero AaBb.cod 200. Similarmente, una lista 216 de hermanos del fichero CcDd.cod 210 comprende "AaBb" para indicar que el fichero AaBb.cod 200 es hermano del fichero CcDd.cod 210.
El fichero AaBb.cod hermano 200 comprende, también, una bolsa 202 de constantes, "estructuras de información y de códigos de bytes" 204 y una o más tablas 208 de organización. Similarmente, el fichero CcDd.cod hermano 210 comprende, también, una bolsa 212 de constantes, "estructuras de información y de códigos de bytes" 214 y una o más tablas 218 de organización. Las tablas de organización 208, 218 pueden incluir indicaciones de los lugares del fichero ".cod" donde la VM Java ha de realizar el trabajo de resolución en el momento del enlace. Las tablas de organización pueden incluir punteros que señalen al nombre de otro fichero ".cod", si es necesario al nombre de la clase que contiene el símbolo, si es necesario al nombre del método o campo dentro de la clase a que se hace referencia, y a la información sobre tipo de campo o de método.
La fig. 3 es una ilustración, en forma de diagrama de flujo simplificado, de un método para la generación de ficheros ".cod" a partir de una colección de ficheros ".java" o de ficheros ".class". El método puede llevarse a cabo mediante software ejecutable o un ordenado para uso general, siendo proporcionado el software, por ejemplo, como parte de un kit de desarrollador de software (SDK).
Se recibe una lista de ficheros ".java" o de ficheros ".class" (paso 300). Si la entrada consiste en ficheros ".java", entonces se aplica un compilador Java a los ficheros ".java" para producir los ficheros ".class" correspondientes (paso 302). Alternativamente, si bien esto no se muestra en la fig. 3, podrían recibirse uno o más ficheros ".jar" y, de ellos, podría extraerse la información relacionada con los ficheros ".class" archivados.
El software ejecutable identifica entradas comunes en las bolsas de constantes de los ficheros ".class" (paso 304).
El software ejecutable identifica referencias cruzadas entre clase, métodos y campos en los ficheros ".class" (paso 306).
El software ejecutable genera entonces ficheros ".cod" hermanos combinando elementos de los ficheros ".class" (paso 308). En el fichero ".cod" hermano generado, la bolsa de constantes contiene solamente una única copia de las entradas comunes identificadas en el paso 304. Por ejemplo, en la fig. 2A, la bolsa 202 de constantes del fichero AaBb.cod hermano 200 comprende únicamente una instancia de las cadenas de caracteres "Bb" y "K" y una instancia del carácter "I" BaseType. En otro ejemplo, la bolsa 212 de constantes del fichero CcDd.cod hermano 210 comprende sólo una instancia de las cadenas de caracteres "Cc" y "P" y una instancia del carácter "I" BaseType.
El software ejecutable utiliza desplazamientos fijos en el fichero ".cod" hermano generado para referencias cruzadas entre clases cuyos ficheros ".cod" se encuentren en el mismo grupo de hermanos. El software ejecutable emplea referencias simbólicas en el fichero ".cod" hermano generado para referencias cruzadas entre clases cuyos ficheros ".cod" pertenecen a diferentes grupos de hermanos y entre clases que tienen ficheros ".cod" sólo.
Esto se comprende mejor a través de ejemplos:
1)
Como se muestra en la fig. 1A, el método Aa.G comprende una referencia al método Bb.K. Por tanto, como se muestra en la fig. 2A, esta referencia aparece en la definición del método Aa.G en "estructuras de información y códigos de bytes" 204 del fichero AaBb.cod hermano 200 como un desplazamiento fijo, HO_{Bb.K}, que especifica la situación de la definición del método Bb.K dentro del fichero AaBb.cod hermano 200. Este desplazamiento fijo no tiene que ser resuelto ni puesto en contexto por la VM Java en el momento del enlace.
2)
Similarmente, como se muestra en la fig. 1B, el método Dd.Q comprende una referencia al método Cc.P. Por tanto, como se muestra en la fig. 2A, esta referencia aparece en la definición del método Dd.Q en "estructuras de información y códigos de bytes" 214 del fichero CcDd.cod hermano 210 como un desplazamiento fijo HO_{Cc.P}, que especifica la situación de la definición del método Cc.P dentro del fichero CcDd.cod hermano 210. Este desplazamiento fijo no tiene que ser resuelto ni puesto en contexto por la VM Java en el momento del enlace.
3)
Como se muestra en la fig. 1A, el método Bb.I comprende una referencia al método Cc.N. Por tanto, como se muestra en la fig. 2A, esta referencia aparece en la definición del método Bb.L en "estructuras de información y códigos de bytes" 204 del fichero AaBb.cod hermano 200 como un desplazamiento fijo HO_{Cc.N}, que especifica la situación de la definición del método Cc.N dentro del fichero CcDd.cod hermano 210. Este desplazamiento fijo ha de ser puesto en contexto por la VM Java en el momento del enlace utilizando información almacenada en la tabla de organización 208. Por ejemplo, la tabla de organización 208 puede comprender un puntero que señale al nombre del fichero CcDd.cod hermano junto con el lugar de la referencia en el método Bb.I al método Cc.N, de forma que la VM Java separa qué fichero ".cod" hermano contiene el método Cc.N en el desplazamiento fijo especificado.
4)
Como se muestra en las figs. 1A y 1B, el método Cc.M comprende una referencia al método Ff.U. El fichero ".cod" para la clase Ff está fuera del grupo de hermanos del fichero CcDd.cod 210. Por tanto, como se muestra en la fig. 2A, esta referencia aparece en la definición del método Cc.M en "estructuras de información y códigos de bytes" 214 del fichero CcDd.cod hermano 210 como referencia simbólica al método Ff.U y su argumento o argumentos. Esta referencia simbólica ha de ser resuelta por la VM Java en el momento del enlace utilizando la información almacenada en la tabla de organización 218. Por ejemplo, la tabla de organización 218 puede comprender un puntero que señale al nombre del fichero ".cod" para la clase en que se define el método Ff.U (por ejemplo, "EeFf.cod"), un puntero que señale al nombre de la clase donde se define el método Ff.U (por ejemplo, "Ff"), un puntero que señale al nombre del método (por ejemplo, "U") y un puntero que señale al nombre de la información que clasifica el método (por ejemplo "I").
\vskip1.000000\baselineskip
Los expertos normales en la técnica apreciarán que cuando se modifica cualquiera de los ficheros de código fuente Cc.java y Dd.java, es necesario invocar el software ejecutable para generar un nuevo fichero CcDd.cod o, alternativamente, invocar el software ejecutable sobre los ficheros ".java" o ".class" modificados junto con uno o más de los ficheros ".java" o ".class" adicionales para generar un nuevo fichero CcDdxxx.cod, donde "x" indica las clases adicionales. Si se ha generado un nuevo fichero CcDd.cod o un nuevo fichero CcDdxxx.cod, entonces el desplazamiento fijo HO_{Cc.N} que aparece en el fichero AaBb.cod 200 resuelto ya no describe con precisión la situación de los códigos de bytes ni de otra información para el método N en el nuevo fichero CcDd.cod o el nuevo fichero CcDdxxx.cod.
En consecuencia, cuando se actualiza un fichero ".cod", se actualizan simultáneamente todos sus ficheros ".cod" hermanos. Si bien el alcance del presente invento no está limitado en este aspecto esto se realiza, generalmente, tomando todo el grupo de ficheros ".class" y regenerando todos los ficheros ".cod" hermanos de salida. Como algunas de las clases han cambiado, la división de clases entre los ficheros ".cod" hermanos recién generados puede ser diferente de la de los ficheros ".cod" hermanos originales.
Si bien se han ilustrado y descrito en esta memoria ciertas características del invento, a los expertos normales en la técnica se les ocurrirán ahora muchas modificaciones, sustituciones, cambios y equivalentes. Por tanto, ha de comprenderse que las reivindicaciones adjuntas están destinadas a cubrir todas las citadas modificaciones y cambios que caigan dentro del alcance de las reivindicaciones anejas.

Claims (15)

1. Un dispositivo (400), que comprende:
una unidad de memoria (404);
una unidad de computación (402) conectada a la unidad de memoria (404), siendo capaz la unidad de computación (404) de ejecutar una Máquina Virtual Java; y
uno o más ficheros (406) almacenados en la unidad de memoria (404), siendo el o los ficheros directamente interpretables por la Máquina Virtual Java, siendo generados el o los ficheros (406) a partir de una pluralidad de ficheros de clase (100A-100F) para reducir el espacio de almacenamiento, en el que un fichero dado (200) del o de los ficheros (406), comprende:
una bolsa (202) de constantes, creada combinando entradas de bolsa de constantes de dos o más (100A, 100B) de la pluralidad de ficheros de clase (100A-100F) sin duplicación de entradas; una estructura (204) de información y de códigos de bytes creada combinando entradas de estructura de información y de códigos de bytes de los dos o más (100A, 100B) de la pluralidad de ficheros de clase (100A-100F); y
una tabla de organización (208) para proporcionar información a la Máquina Virtual Java para resolver al menos una entrada del fichero dado en el momento del enlace.
\vskip1.000000\baselineskip
2. El dispositivo de la reivindicación 1, en el que la unidad de memoria (404) incluye software ejecutable y la unidad de computación (402) está dispuesta para ejecutar el software ejecutable con el fin de generar el o los ficheros (406) a partir de la pluralidad de ficheros de clase (100A-100F) combinando elementos de la pluralidad de ficheros de clase (100A-100F) sin duplicación de entradas para reducir el espacio de almacenamiento, en el que el número de ficheros (406) generados a partir de la pluralidad de ficheros de clase (100A-100F) es menor que el número de la pluralidad de ficheros de clase (100A-100F).
3. El dispositivo (400) de la reivindicación 1 o de la reivindicación 2, en el que la información de la tabla de organización (208) comprende la situación de los datos necesarios para resolver una referencia simbólica del fichero dado (200).
4. El dispositivo (400) de una cualquiera de las reivindicaciones 1 a 3, en el que hay al menos dos ficheros (406), del número de ficheros (406) generados a partir de la pluralidad de ficheros de clase (100A-100F), definidos como ficheros hermanos (200, 210) en un grupo de hermanos comunes, comprendiendo cada uno de los ficheros hermanos (200, 210) una lista (206, 216) de hermanos para enumerar otros ficheros hermanos en el grupo de hermanos comunes, en el que las referencias cruzadas entre los ficheros hermanos (200, 210) del grupo de hermanos comunes, se indican utilizando desplazamientos fijos, y las referencias a ficheros que no son parte del grupo de hermanos comunes se indican utilizando referencias simbólicas.
5. El dispositivo (400) de la reivindicación 4, en el que la información de la tabla de organización (208) de un fichero hermano (200) dado comprende la situación de los datos de un fichero hermano (210) al que se hace referencia cruzada para poner en contexto, en el momento del enlace, uno de los desplazamientos fijos que corresponde al fichero hermano (210) al que se hace referencia cruzada.
6. El dispositivo de cualquiera de las reivindicaciones precedentes, en el que para el fichero dado (200), la estructura (204) de información y de códigos de bytes incluye un segundo desplazamiento fijo para hacer referencia cruzada a un método incluido en el fichero dado (200) al que se hizo referencia previamente de manera simbólica.
7. El dispositivo (400) de la reivindicación 4 o de la reivindicación 6, en el que al menos uno de los desplazamientos fijos no tiene que ser resuelto ni puesto en contexto por la Máquina Virtual Java en el momento del enlace.
8. Un método de generar uno o más ficheros (406) a partir de una pluralidad de ficheros de clase (100A-100F), cuyo método comprende:
identificar ficheros de clase (100A, 100B) con entradas comunes en bolsas de constantes (102A, 102B) de los ficheros de clase (100A, 100B);
generar una bolsa de constantes (202) para un fichero generado dado (200) combinando entradas de bolsa de constantes de los ficheros de clase (100A, 100B) con entradas comunes sin duplicaciones;
generar la estructura (204) de información y de códigos de bytes para el fichero generado dado (200) combinando entradas de estructura (204) de información y de códigos de bytes de los ficheros de clase (100A, 100B); y
generar una tabla de organización (208) para proporcionar información a una Máquina Virtual Java para resolver al menos una entrada del fichero generado dado (200) en el momento del enlace.
9. El método de la reivindicación 8, que comprende, además, generar el o los ficheros (406) a partir de una pluralidad de ficheros de clase (100A-100F) combinando elementos de la pluralidad de ficheros de clase (100A-100B) sin duplicación de entradas para reducir el espacio de almacenamiento, en el que el número de ficheros (406) generados a partir de la pluralidad de ficheros de clase (100A-100F) es menor que el número de la pluralidad de ficheros de clase (100A-100F).
10. El método de la reivindicación 8 o de la reivindicación 9, cuyo método incluye, además, proporcionar la situación de los datos necesarios para resolver una referencia simbólica del fichero generado dado (200) como información de la tabla de organización (208).
11. El método de una cualquiera de las reivindicaciones 8 a 10, cuyo método incluye, además, identificar las referencias cruzadas entre los ficheros de clase (100A, 100B) y definir al menos dos ficheros (406) a partir del número de ficheros (406) generados a partir de la pluralidad de ficheros de clase (100A-100F) como ficheros hermanos (200, 210) en un grupo de hermanos comunes, comprendiendo cada uno de los ficheros hermanos (200, 210) una lista de hermanos (206, 216) para enumerar otros ficheros hermanos del grupo de hermanos comunes, indicar las referencias cruzadas entre los ficheros hermanos (200, 210) del grupo de hermanos comunes utilizando desplazamientos fijos, e indicar las referencias a ficheros que no forman parte del grupo de hermanos comunes utilizando referencias simbólicas.
12. El método de la reivindicación 11, cuyo método incluye, además, proporcionar la situación de datos de un fichero hermano (210) para el que existe una referencia cruzada, como la información de la tabla de organización (208) de un fichero hermano dado (200) para poner en contexto, en el momento del enlace, uno de los desplazamientos fijos que corresponde al fichero hermano (210) al que se hace referencia cruzada.
13. El método de una cualquiera de las reivindicaciones 8 a 12, cuyo método incluye, además, para el fichero generado dado (200), proporcionar un segundo desplazamiento fijo en la estructura (204) de información y códigos de bytes, para hacer referencia cruzada a un método ahora incluido en el fichero generado dado (200) al que, previamente, se hizo referencia simbólicamente.
14. El método de la reivindicación 11 o la reivindicación 13, cuyo método incluye, además, proporcionar al menos uno de los desplazamiento fijos de una manera que no necesite se resuelto ni puesto en contexto por la Máquina Virtual Java en el momento del enlace.
15. Un producto de programa de ordenador para generar uno o más ficheros (406) a partir de una pluralidad de ficheros de clase (100A-100F) combinando elementos de la pluralidad de ficheros de clase (100A-100F) sin duplicación de entradas para reducir el espacio de almacenamiento, comprendiendo el producto de programa de ordenador un medio legible por ordenador que incorpora medios de código de programa ejecutables por un procesador de una unidad de computación (402) para llevar a la práctica el método de cualquiera de las reivindicaciones 8 a 14.
ES02782563T 2002-11-29 2002-11-29 Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado. Expired - Lifetime ES2305316T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CA2002/001841 WO2004051468A1 (en) 2002-11-29 2002-11-29 Method for generating interpretable code for storage in a device having limited storage

Publications (1)

Publication Number Publication Date
ES2305316T3 true ES2305316T3 (es) 2008-11-01

Family

ID=32399660

Family Applications (1)

Application Number Title Priority Date Filing Date
ES02782563T Expired - Lifetime ES2305316T3 (es) 2002-11-29 2002-11-29 Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado.

Country Status (10)

Country Link
US (2) US7761861B2 (es)
EP (2) EP1909174B1 (es)
CN (1) CN100395703C (es)
AT (2) ATE396452T1 (es)
AU (1) AU2002347146A1 (es)
CA (1) CA2507371C (es)
DE (2) DE60226786D1 (es)
ES (1) ES2305316T3 (es)
HK (1) HK1081294A1 (es)
WO (1) WO2004051468A1 (es)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2305316T3 (es) * 2002-11-29 2008-11-01 Research In Motion Limited Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado.
US20050155024A1 (en) * 2004-01-14 2005-07-14 Jeffrey Wannamaker Method of transforming java bytecode into a directly interpretable compressed format
WO2006031049A2 (en) * 2004-09-13 2006-03-23 Lg Electronics Inc. Method and apparatus for reproducing data from recording medium using local storage
EP1789958A4 (en) * 2004-09-13 2009-12-09 Lg Electronics Inc METHOD AND DEVICE FOR REPRODUCING DATA RECORDED IN A RECORDING MEDIUM USING A LOCAL STORAGE
US20060077817A1 (en) * 2004-09-13 2006-04-13 Seo Kang S Method and apparatus for reproducing data from recording medium using local storage
KR20060047549A (ko) * 2004-10-12 2006-05-18 엘지전자 주식회사 로컬 스토리지를 이용한 기록매체 재생방법 및 재생장치
BRPI0517651A (pt) * 2004-11-08 2008-10-14 Lg Electronics Inc método e aparelho para reproduzir dados de meio de gravação, método para atualizar dados de armazenagem local, método para formar pacote virtual
KR20060063601A (ko) * 2004-12-03 2006-06-12 엘지전자 주식회사 로컬 스토리지에 데이터를 다운로드/업데이트 하는 방법 및장치
KR20060081323A (ko) * 2005-01-07 2006-07-12 엘지전자 주식회사 로컬 스토리지를 이용한 기록매체 재생방법 및 재생장치
US8018609B2 (en) 2005-09-13 2011-09-13 Sony Corporation Information processing device, information recording medium manufacturing device, information recording medium, methods therefore, and computer program
US8813041B2 (en) * 2008-02-14 2014-08-19 Yahoo! Inc. Efficient compression of applications
US8060476B1 (en) 2008-07-14 2011-11-15 Quest Software, Inc. Backup systems and methods for a virtual computing environment
US8046550B2 (en) 2008-07-14 2011-10-25 Quest Software, Inc. Systems and methods for performing backup operations of virtual machine files
US8429649B1 (en) 2008-09-25 2013-04-23 Quest Software, Inc. Systems and methods for data management in a virtual computing environment
US8996468B1 (en) 2009-04-17 2015-03-31 Dell Software Inc. Block status mapping system for reducing virtual machine backup storage
US9778946B2 (en) * 2009-08-07 2017-10-03 Dell Software Inc. Optimized copy of virtual machine storage files
CA2785048C (en) 2009-12-21 2015-06-30 Kik Interactive Inc. Systems and methods for accessing and controlling media stored remotely
US9569446B1 (en) 2010-06-08 2017-02-14 Dell Software Inc. Cataloging system for image-based backup
US8898114B1 (en) 2010-08-27 2014-11-25 Dell Software Inc. Multitier deduplication systems and methods
KR101788061B1 (ko) * 2011-06-16 2017-10-19 엘지전자 주식회사 가상 머신이 탑재된 디스플레이 장치 및 그 제어 방법
US9042266B2 (en) 2011-12-21 2015-05-26 Kik Interactive, Inc. Methods and apparatus for initializing a network connection for an output device
US9311375B1 (en) 2012-02-07 2016-04-12 Dell Software Inc. Systems and methods for compacting a virtual machine file
JP2017126293A (ja) * 2016-01-15 2017-07-20 キヤノン株式会社 情報処理装置及びリソース管理方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
HUP0101368A3 (en) 1998-03-23 2004-04-28 Ibm Java runtime system with modified constant pool
US6336122B1 (en) * 1998-10-15 2002-01-01 International Business Machines Corporation Object oriented class archive file maker and method
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming
EP1207454A1 (en) * 2000-11-15 2002-05-22 International Business Machines Corporation Java run-time system with modified linking identifiers
US20020170047A1 (en) * 2001-02-23 2002-11-14 Brian Swetland System and method for transforming object code
US6732108B2 (en) * 2001-07-12 2004-05-04 International Business Machines Corporation Class file archives with reduced data volume
ES2305316T3 (es) * 2002-11-29 2008-11-01 Research In Motion Limited Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado.

Also Published As

Publication number Publication date
EP1909174B1 (en) 2011-01-19
US20100281470A1 (en) 2010-11-04
EP1570347B1 (en) 2008-05-21
CN1695117A (zh) 2005-11-09
CA2507371A1 (en) 2004-06-17
US20060020932A1 (en) 2006-01-26
AU2002347146A1 (en) 2004-06-23
CN100395703C (zh) 2008-06-18
DE60226786D1 (de) 2008-07-03
EP1570347A1 (en) 2005-09-07
HK1081294A1 (en) 2006-05-12
EP1909174A1 (en) 2008-04-09
ATE496330T1 (de) 2011-02-15
ATE396452T1 (de) 2008-06-15
US7761861B2 (en) 2010-07-20
DE60239024D1 (de) 2011-03-03
WO2004051468A1 (en) 2004-06-17
CA2507371C (en) 2012-01-24

Similar Documents

Publication Publication Date Title
ES2305316T3 (es) Metodo para generar un codigo interpretable para el almacenamiento en un dispositivo que tiene el espacio de almacenamiento limitado.
ES2680147T3 (es) Instrucción para cargar datos hasta una frontera de memoria especificada indicada por la instrucción
Hapala et al. Efficient stack-less bvh traversal for ray tracing
JP4913302B2 (ja) 言語サブセットの妥当性検査
CN108932406A (zh) 虚拟化软件保护方法和装置
WO2024045382A1 (zh) 区块链中实现反射机制
CN110147239A (zh) 游戏安装包体的多重压缩的方法、设备及存储介质
Hitchens Java NIO: Regular Expressions and High-Performance I/O
EP3384406A1 (en) Combining hashes of data blocks
Serna CVE-2012-0769, the case of the perfect info leak
CN106445546B (zh) 一种事件系统的创建方法及装置
ES2927748T3 (es) Optimización de huella de memoria de aplicación de tarjeta java
JP2005507103A (ja) Javaヒープを実現するフレームワーク
CN106687978A (zh) 对栈破坏利用的抑制
Cardelli The amber machine
Blyth et al. ProIO: An event-based I/O stream format for protobuf messages
JP2005521117A (ja) Javaプログラミング環境におけるオブジェクトの表現のための2ティアのクラスタ
CN101770368B (zh) .net文件中命名空间的压缩方法和装置
Cooke et al. Strong cryptography in the Linux kernel
Zheng et al. Solidity basics
Nita et al. Jdk 17: New features
CN108614687A (zh) 一种在c++程序中实现反射的方法、存储介质及计算设备
CN109492353B (zh) 应用加固方法、装置、电子设备和存储介质
CN118035958A (zh) 基于动态链接库提高源码安全的方法、装置、设备及介质
CN114741131B (zh) 动态库导出符号的隐藏方法、装置、设备及存储介质