- 浏览: 3053311 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
刚才有同事说在中文Windows上用maven-compiler-plugin出错了,因为用javac编译时输出的警告信息里有中文,而maven-compiler-plugin插件只能识别英文结果就错了。所以想找办法让javac输出英文信息。
我虽然没在用maven-compiler-plugin遇到这个问题,不过之前也一直想让javac输出英文信息。这次顺便把找方法的过程记下。
javac本身是用Java写的,选取字符串资源时会受到底下的JVM的语言状态影响。那么问题就转变为如何让JVM用英文环境来执行(同时还得继续使用GBK编码作为默认编码,不然有些文件的读取就不对了)。
其实问题不在系统是不是中文的,而在“国家”是不是中国。
通过设定Java的系统属性 user.country ,就可以任意指定JVM“认为”的当前所在国家;用于指定文件的默认编码的系统属性则是 file.encoding ,跟国家是分开的。
这里所说的“系统属性”是指在Java程序中通过 java.lang.System.getProperty() 能获取到的那些属性。
如果用java/java.exe来启动JVM,那么在命令行上使用 -Duser.country=US 就可以把国家指定为美国。用javac/javac.exe来启动javac编译器则需要再多加个-J在前面,也就是 -J-Duser.country=US 。
例子如下:
可以参考一下Mindprod上的一篇介绍
图片?是说JConsole的截图么?如果JAVA_HOME在您的PATH上那直接jconsole即可;如果没在的话那 %JAVA_HOME%\bin\jconsole (%JAVA_HOME%没设的话替换为您的JDK安装路径)
我虽然没在用maven-compiler-plugin遇到这个问题,不过之前也一直想让javac输出英文信息。这次顺便把找方法的过程记下。
javac本身是用Java写的,选取字符串资源时会受到底下的JVM的语言状态影响。那么问题就转变为如何让JVM用英文环境来执行(同时还得继续使用GBK编码作为默认编码,不然有些文件的读取就不对了)。
其实问题不在系统是不是中文的,而在“国家”是不是中国。
通过设定Java的系统属性 user.country ,就可以任意指定JVM“认为”的当前所在国家;用于指定文件的默认编码的系统属性则是 file.encoding ,跟国家是分开的。
这里所说的“系统属性”是指在Java程序中通过 java.lang.System.getProperty() 能获取到的那些属性。
如果用java/java.exe来启动JVM,那么在命令行上使用 -Duser.country=US 就可以把国家指定为美国。用javac/javac.exe来启动javac编译器则需要再多加个-J在前面,也就是 -J-Duser.country=US 。
例子如下:
Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. D:\>javac 用法:javac <选项> <源文件> 其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件和注释处理程序的位置 -cp <路径> 指定查找用户类文件和注释处理程序的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖安装的扩展目录的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认 的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -d <目录> 指定存放生成的类文件的位置 -s <目录> 指定存放生成的源文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding <编码> 指定源文件使用的字符编码 -source <版本> 提供与指定版本的源兼容性 -target <版本> 生成特定 VM 版本的类文件 -version 版本信息 -help 输出标准选项的提要 -Akey[=value] 传递给注释处理程序的选项 -X 输出非标准选项的提要 -J<标志> 直接将 <标志> 传递给运行时系统 D:\>javac -J-Duser.country=US Usage: javac <options> <source files> where possible options include: -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging info -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -deprecation Output source locations where deprecated APIs are u sed -classpath <path> Specify where to find user class files and annotati on processors -cp <path> Specify where to find user class files and annotati on processors -sourcepath <path> Specify where to find input source files -bootclasspath <path> Override location of bootstrap class files -extdirs <dirs> Override location of installed extensions -endorseddirs <dirs> Override location of endorsed standards path -proc:{none,only} Control whether annotation processing and/or compil ation is done. -processor <class1>[,<class2>,<class3>...]Names of the annotation processors t o run; bypasses default discovery process -processorpath <path> Specify where to find annotation processors -d <directory> Specify where to place generated class files -s <directory> Specify where to place generated source files -implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files -encoding <encoding> Specify character encoding used by source files -source <release> Provide source compatibility with specified release -target <release> Generate class files for specific VM version -version Version information -help Print a synopsis of standard options -Akey[=value] Options to pass to annotation processors -X Print a synopsis of nonstandard options -J<flag> Pass <flag> directly to the runtime system
可以参考一下Mindprod上的一篇介绍
引用
The System properties are generated by a magic native method System.initProperties. There is no corresponding jar element or *.properties file on disk. file. You can temporarily add a System property with the -D option on the java.exe line. You can also use the technique to pass the value of a SET variable in as a system property.
评论
3 楼
RednaxelaFX
2012-12-12
logicmd 写道
Windows也没有Alias,还是我只是改一个编译的脚本,直接改即可。
另外楼主的图片窗口是怎么打开的啊?
另外楼主的图片窗口是怎么打开的啊?
图片?是说JConsole的截图么?如果JAVA_HOME在您的PATH上那直接jconsole即可;如果没在的话那 %JAVA_HOME%\bin\jconsole (%JAVA_HOME%没设的话替换为您的JDK安装路径)
2 楼
logicmd
2012-12-12
Windows也没有Alias,还是我只是改一个编译的脚本,直接改即可。
另外楼主的图片窗口是怎么打开的啊?
另外楼主的图片窗口是怎么打开的啊?
1 楼
umeit
2011-08-18
要是能在执行javac时自动加上这些参数就好了,不知道能不能实现?
发表评论
-
The Prehistory of Java, HotSpot and Train
2014-06-02 08:18 0http://cs.gmu.edu/cne/itcore/vi ... -
MSJVM and Sun 1.0.x/1.1.x
2014-05-20 18:50 0当年的survey paper: http://www.sym ... -
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
class data sharing by Apple
2014-03-28 05:17 0class data sharing is implement ... -
Java 8与静态工具类
2014-03-19 08:43 16297以前要在Java里实现所谓“静态工具类”(static uti ... -
Java 8的default method与method resolution
2014-03-19 02:23 10467先看看下面这个代码例子, interface IFoo { ... -
HotSpot Server VM与Server Class Machine
2014-02-18 13:21 0HotSpot VM历来有Client VM与Server V ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
GC stack map与deopt stack map的异同
2014-01-08 09:56 0两者之间不并存在包含关系。它们有交集,但也各自有特别的地方。 ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22410(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对C语义的for循环的基本代码生成模式
2013-10-19 23:12 21887之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
oop、klass、handle的关系
2013-07-30 17:34 0oopDesc及其子类的实例 oop : oopDesc* ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ... -
《深入理解Java虚拟机(第二版)》书评
2013-07-08 19:19 0值得推荐的中文Java虚拟机入门书 感谢作者赠与的样书,以下 ... -
豆列:从表到里学习JVM实现
2013-06-13 14:13 48399刚写了个学习JVM用的豆列跟大家分享。 豆列地址:http: ...
相关推荐
本文档将详细阐述如何在Windows的CMD环境中设置命令行输出为英文,从而有效解决中文乱码问题。 首先,我们需要了解CMD的基本信息。CMD(Command Prompt)是Windows系统中的命令行接口,用于执行系统命令。在.NET 6...
有时候,我们在中文系统平台下开发的 Web 应用程序移植到英文系统平台下,在 Servlet 和 JSP 中直接书写的中文字符串在输出时,将显示为乱码。这是因为在编译 Servlet 类或者 JSP 文件时,如果没有使用 -encoding ...
如果在非中文环境中运行,JVM需要将Unicode编码的字符转换为本地系统支持的编码,例如在英文Linux系统上,可能需要从Unicode转换为ASCII或ISO-8859-1。 4. 当Java程序输出中文字符到控制台、文件或网络时,JVM会...
2. Java是跨平台编程语言,编写的程序不仅能在中文Windows上运行,也能在中文Linux或其他系统上运行,甚至在英文系统上运行。这种移植操作若未妥善处理编码问题,也会带来中文乱码。 3. 当使用不支持中文的英文操作...
在解析和输出字符串时,JVM会根据系统属性`file.encoding`确定编码格式。 以中文Win2K为例,如果源文件使用GBK编码,javac会尝试将其转换为UTF-8编码,然后在运行时,JVM又需将UTF-8编码的字节码还原为GBK编码以...
2. JVM处理:JVM读取的.class文件是以Unicode编码的,但在不同平台上的输出(如控制台输出、文件写入)需要根据系统默认编码进行转换。 3. 浏览器和参数传递:浏览器通常使用UTF-8编码传递参数,如果服务器端未正确...
1. **源代码编写**:开发者在特定的操作系统上使用支持中文的编辑器编写Java源代码,该文件默认采用操作系统默认支持的编码格式(如GBK)保存。 2. **编译阶段**:Java源代码通过`javac`命令编译成`.class`文件。...
例如,当在中文Windows系统上,操作系统通常使用GBK或GB2312编码,而在英文系统上则可能是UTF-8或其他编码。如果这个转换过程出现问题,就会导致乱码。例如,一个在中文Windows上用GBK编码保存的文件,如果在不支持...
但在实际应用中,Java程序可能会部署在不同编码环境的操作系统上(如中文Windows和英文Linux),这就涉及到了编码转换的问题。如果编码转换不当,很容易导致中文乱码的情况出现。 #### 二、Java中文问题的根本原因 ...
然而,当这些字节码在不同的操作系统上运行,特别是那些不支持中文或者默认编码不同的系统(如英文版Linux)时,如果没有进行正确的编码转换,中文字符在输出时会显示为乱码。 在Web应用中,例如JSP、Servlet和EJB...
3. **跨平台兼容性**:Java的跨平台特性使得程序在不同的操作系统上运行,如从中文Windows移植到英文Linux,需要考虑不同系统对字符编码的支持,不一致的编码设置会导致中文乱码。 4. **网络传输与浏览器兼容**:...
Java作为一种跨平台的语言,其内部采用Unicode编码,确保在各种系统上都能处理各种语言的文本。 然而,不同的操作系统和应用程序默认使用的编码格式可能不同。例如,中文Windows系统通常使用GBK或GB2312编码,而...
在Java编程技术中,汉字问题主要涉及到编码的处理和转换,因为Java的默认编码是UNICODE,而我们日常使用的文件和数据库可能采用GB2312或BIG5等编码方式。这种差异可能导致在读写汉字时出现乱码,影响程序的正常运行...
假设你在一台英文版的UNIX系统上开发一个需要支持中文界面的应用,为了确保应用在该系统上能够正常显示和处理中文,可以在启动Java应用时加入以下命令行参数: ```bash java -Dclient.encoding.override=GBK -Dfile...
当Java程序在开发环境中创建时,比如在中文Windows系统中使用文本编辑器(如记事本)编写,文件会被保存为操作系统默认的GBK编码。然后,`javac`编译器将.java源文件编译为.class字节码文件。在这个过程中,Java...
- 编程时,开发者在特定操作系统(如中文Win2K)上使用编辑器(如记事本)以GBK编码保存.java源文件。 - 使用JDK的javac编译器编译.java文件,Java编译器能够识别Unicode注释和字符串,但源文件的编码是GBK。 - ...
- **跨平台问题**:Java程序在不同操作系统之间移植时可能出现中文乱码问题,尤其是在从中文操作系统移植到英文操作系统时。 - **网络传输问题**:当通过网络传输包含中文的数据时,如果没有正确指定传输数据的编码...
2. **跨平台运行**:Java程序在不同的操作系统(如中文Windows和英文Linux)之间移植时可能出现中文显示错误。 3. **浏览器默认编码**:大多数浏览器默认使用UTF-8编码格式传递参数,这与中文编码格式不一致,可能...
这些属性可以用来设定JVM使用的字符编码,例如在英文操作系统中,可以通过命令行参数如`-Dclient.encoding.override=GBK -Dfile.encoding=GBK -Duser.language=zh -Duser.region=CN`来强制设置JVM为中文环境。...