摘要:在有些場景為了安全考慮環境變量是被禁用的,比如系統中但有效用戶或組不是實際時則禁用此環境變量。
JAVA_TOOL_OPTIONS是何物
有些應用不方便設置JVM參數,如命令行應用、通過JNI(Java Native Interface)API調用虛擬機的應用、腳本嵌入虛擬機中的應用等。這種情況環境變量JAVA_TOOL_OPTIONS就非常有用了,它會被JNI API的JNI_CreateJavaVM函數使用。
Note:
在有些場景為了安全考慮環境變量JAVA_TOOL_OPTIONS是被禁用的,比如Solaris系統中但有效用戶ID或組ID不是實際ID時則禁用此環境變量。
因為JAVA_TOOL_OPTIONS是被被JNI_CreateJavaVM調用的,顧名思義是創建VM,因此有些參數是不能被設置的如選擇虛擬機運行模式-client或-server。
各種OPTIONS的區別也許你經常遇到JAVA_OPTS、_JAVA_OPTIONS和JAVA_TOOL_OPTIONS,那么他們有什么不同呢?
JAVA_OPTS:常用于一些應用的配置,如Tomcat,但它一般不作為環境變量,也不能被JVM識別的,是那些應用的自定義配置;
_JAVA_OPTIONS:也是作為環境變量來替代命令行參數的,但它是JVM廠家自定義的,可以覆蓋JAVA_TOOL_OPTIONS,但各廠家的不同,_JAVA_OPTIONS是Oracle的JVM,而IBM的則是用IBM_JAVA_OPTIONS。
JAVA_TOOL_OPTIONS:是標準的,所有虛擬機都能識別和應用的。
如果想驗證上面的不同也不難,如果設置了JVM能識別的環境變量,JVM會有"Picked up"的提示的,如:
export JAVA_OPTS=zhaiqiafneng export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m" java -version
JVM會打印:
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
可見JAVA_TOOL_OPTIONS能被JVM識別,而JAVA_OPTS不能被識別。
可以通過設置-Xmx的值觸發“Too small initial heap”異常連檢測覆蓋(當然你也可以通過其他方式):
export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m" export _JAVA_OPTIONS="-Xmx1k -Xms1k" java -version
JVM會打印
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m
Picked up _JAVA_OPTIONS: -Xmx1k -Xms1k
Error occurred during initialization of VM
Too small initial heap
可見_JAVA_OPTIONS覆蓋了JAVA_TOOL_OPTIONS.
解決的經典問題JAVA_TOOL_OPTIONS用于解決的經典問題是使用命令行導致中文亂碼,如:
........
/HController.java:181: error: unmappable character for encoding GBK// ???后的發??? ^/HController.java:181: error: unmappable character for encoding GBK
// ???后的發??? ^.......
通過設置環境變量JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"一般可以解決,如果不能解決,就要根據你具體的編碼來設置下就好。
更多原創文章可關注我的個人博客:宅前瘋 或微信公眾賬號:zhaiqianfeng
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66756.html
摘要:用于將集成至標準的構建生命周期中,此時執行時就會執行指定的操作,從而實現自定義打包。插件的已棄用會自動執行生命周期。可執行文件執行時出現亂碼使用生成的可執行文件,在中執行時出現亂碼,項目編碼統一為,日志使用框架。得到的是當前的絕對路徑。 「博客搬家」 原地址: 簡書 原發表時間: 2017-04-06 1. 設置 Java JDK 的版本為「JDK 1.8」 可以修改 pom.x...
摘要:正文執行環境的理解執行環境或者執行上下文后面簡稱定義了變量或者函數有權訪問的其他數據,決定了他們各自的行為。最后全局環境的變量對象總結活動對象和變量對象是執行環境在不同生命期的不同叫法。未進入執行階段之前,變量對象中的屬性都不能訪問。 背景 夯實基礎才是進步的根源,基礎不牢地動山搖!!于是乎,結合《javascript高級程序設計》來點基礎的學習和理解。本文主要會有兩部分。rt!! 正...
摘要:至此作用域鏈創建完畢。好了,通過深入理解作用域鏈,我們能跟好的理解的運行機制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對我們理解js這們語言。這次想深入的聊下關于js執行的內部機制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當一個函數執行時,js引擎做了哪些事情--那些我們看不見的動作。 關鍵詞: 執行環境 作用域 作用域鏈 變...
閱讀 2427·2021-10-11 10:57
閱讀 1277·2021-10-09 09:59
閱讀 1992·2019-08-30 15:53
閱讀 3211·2019-08-30 15:53
閱讀 1007·2019-08-30 15:45
閱讀 736·2019-08-30 15:44
閱讀 3442·2019-08-30 14:24
閱讀 952·2019-08-30 14:21