获得徽章 0
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
#每日一题#
面试题欢迎补充:
1. java中一个String的长度有没有限制?
2. Android中dex方法数为什么限制65536?
为什么方法数不能超过65535?
因为在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits。即由于dalvik bytecode的限制,65536是bytecode的16位限制算出来的,最多能调用2ⁿ(n=16) 65536个方法,所以在生成dex文件的过程中,当方法数超过65536就会报错。
无独有偶,java代码中声明的String字符串最终在class文件中的存储格式是CONSTANT_utf8_info,因此一个字符串最大长度也就是u2的最大值,u2在字节码文件中是2位,所以一个字符串最大长度2ⁿ(n=16) 即65536个。除去2个字节要保存null值所以一个字符串最大长度是65536-2
面试题欢迎补充:
1. java中一个String的长度有没有限制?
2. Android中dex方法数为什么限制65536?
为什么方法数不能超过65535?
因为在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits。即由于dalvik bytecode的限制,65536是bytecode的16位限制算出来的,最多能调用2ⁿ(n=16) 65536个方法,所以在生成dex文件的过程中,当方法数超过65536就会报错。
无独有偶,java代码中声明的String字符串最终在class文件中的存储格式是CONSTANT_utf8_info,因此一个字符串最大长度也就是u2的最大值,u2在字节码文件中是2位,所以一个字符串最大长度2ⁿ(n=16) 即65536个。除去2个字节要保存null值所以一个字符串最大长度是65536-2
展开
1
2
赞了这篇文章
赞了这篇文章