Me pregunto si encajonar un tipo de valor en un objeto es un caso especial o si el "cuadro" construido por .NET se convierte en basura (que el GC tiene que recopilar) después de que se omitan las referencias a él.¿El boxeo crea basura en .NET?
Por ejemplo, StringBuilder.AppendFormat() tiene estas sobrecargas:
StringBuilder.AppendFormat(string format, object arg0);
StringBuilder.AppendFormat(string format, object arg0, object arg1);
StringBuilder.AppendFormat(string format, object arg0, object arg1, object arg2);
StringBuilder.AppendFormat(string format, params object[] args);
Tener esas sobrecargas adicionales para llamadas con 3 o menos argumentos podría indicar que el boxeo de hecho es un caso especial (o que vale la pena, desde un punto de vista de rendimiento, para evitar la construcción de matriz).
Teóricamente, usar el recuento de referencias antiguo simple, posiblemente con un grupo de cajas reutilizables sería una implementación válida porque no puede haber referencias de una caja a otra, solo de objetos .NET a una caja.
Me estoy apegando al significado específico de "boxeo" en .NET. Me preguntaba si esas sobrecargas en la clase StringBuilder solo estaban ahí para evitar * basura * adicional en la forma de la matriz, o si evitarían * toda * basura porque, por ejemplo. encajonar un entero en un objeto no produciría basura. – Cygon
@Cygon: Creo que traer la creación de matriz automática con un parámetro "params" oscureció algo su pregunta: las sobrecargas son completamente irrelevantes para el boxeo. Sí, las sobrecargas podrían evitar crear basura adicional, aunque no creo que lo hagan. Creo que las sobrecargas de los parámetros individuales realmente llaman a uno con una matriz, creando la matriz de forma explícita. Sin embargo, ayuda a los lenguajes que no admiten matrices de parámetros. –
No creo que su código Java * esté garantizado * para imprimir 'true'. * Imprimirá "verdadero" con la JVM de Sun, porque la implementación de 'Integer.valueOf (int)' (el método utilizado internamente para el boxeo) almacena en caché instancias 'Integer' para valores de -128 a 127, pero eso no es una * requisito * de la plataforma Java. Otra JVM podría reclamar la conformidad sin dicho almacenamiento en caché. –