Java VM是否因其编码而变慢?

时间:2011-04-19 16:32:33

标签: java encoding jvm

假设一名西班牙队友写了一个类似TipoNotificación的班级。注意ú,ó等特殊字符

除了编码项目正常化之外,我还会遇到什么样的麻烦?

5 个答案:

答案 0 :(得分:3)

  

超越编码项目规范化

这应该足以排除标识符中的非ascii字符:

  1. 某些角色在视觉上无法区分(U + 0041 / U + 0391),在极端情况下可能会导致混淆
  2. 不是每个人都有一个键盘,可以轻松输入[a]可爱的角色;这对开发者来说可能是令人沮丧的。
  3. 至于你原来的问题,我认为没有任何重大开销。如前所述,字符串内部存储在UTF-16中。但是,JAR文件中的文件名(包括类文件名)以UTF-8编码,这意味着JVM在加载时为每个非ascii字符读取一个额外字节。由于西班牙语每个单词最多有一个变音符号,因此每个类平均可以预计一个或两个额外字节。即使在最有限的硬件环境中也无法注意到它。

答案 1 :(得分:1)

类的名称仅在链接时(和反射)使用,因此应用程序在启动并运行后应不受影响。我无法想象解码多字节字符的开销会很大。

OTOH,您最终可能会遇到文件系统名称,文本编辑器字符编码以及甚至jar / zip文件名的常见问题。

答案 2 :(得分:1)

唯一会受到影响的是加载和处理文本文件所需的时间。类文件(二进制文件)不应受到影响。确保正确设置了Java IDE和构建系统。如果您使用的是Maven,系统将提示您在多个位置设置字符集编码。

JVM将数据存储为UCS-2,即UTF-16。这意味着每个字符在内部存储有两个字节的数据。对于来自C背景的人来说,这有时会让人感到不快,每个字符通常都是一个ASCII字节(高位未定义)。你可以花上数周的时间来学习和折磨你自己的编码。

我可以给出的一条建议可能就是将一切设置为UTF-8。在任何地方都要标准化。在IDE,文本编辑器,构建,JSP页面中,尤其是在数据库中。编写单元测试和集成测试以确保所有内容都设置为UTF-8。你真的不想处理数据迁移/清理,试图找出导致特定字符串奇怪字符的随机编码。

这是我前一段时间写的I18N幻灯片,希望这会有所帮助。

http://www.slideshare.net/williverson/software-internationalization-crash-course

哦,你应该假设任何通过网络传输的文件名(例如文件共享,电子邮件)都会被搞砸并呈现为ASCII或本地操作系统编码。例如,在Mac上将是MacRoman和美国英语系统CP1251。所以,如果你把你的类捆绑在一个JAR中它可能没问题,但是未爆炸的类(或源文件!)会有问题。不是JVM,而是操作系统级别的东西。

答案 3 :(得分:0)

不,它不应该在运行时引起任何问题。无论如何,Java在内部将所有字符串存储为UTF-8。您可能遇到的唯一问题是管理源文件。

答案 4 :(得分:0)

Java使用UTF16对字符串进行编码,它可以轻松覆盖带有重音的字符,而不需要增加内存。因此,你的问题的答案是否定的。