El array de 65536 elementos ocupa la suma de lo que ocupen todos los elementos, que puede ser diferente por cada elemento según el tipo de elemento de que se trate.
Por ejemplo, si es un array de int, dado que cada int siempre ocupa 4 bytes, la ocupación sería de 65536*4. En este caso, ninguno podría estas vacío; los int siempre tienen que tener un valor, aunque sea cero, que ocupa 4 bytes igual que cualquier otro.
Pero si el array es, por ejemplo, un array de strings, entonces cada uno de los strings puede tener una longitud diferente. Habría que tomarlos todos, sumar lo que mide cada uno, y sumar lo que ocupa cada una de las referencias que permiten que el string
sea accesible desde el array (si no me equivoco, 10 bytes por cada referencia). Si uno de ellos está "vacío" (en el sentido de que es null, no de que contiene una cadena con cero caracteres, que es diferente que un null), entonces únicamente ocupa
los 10 bytes de la referencia.
Los int y string son solo dos ejemplos. Podrías tener un array de otro tipo de objeto, en cuyo caso habría que analizar las características del objeto para calcular cuántos bytes ocupa por elemento.