簡體   English   中英

在Java中使用System.getenv()的性能影響

[英]The performance impact of use System.getenv() in java

我有一個用jersey構建的Java REST Web服務,出於安全原因,我想在OS環境變量中保存方法的參數: DriverManager.getConnection(); 網址,用戶名和密碼。

因為每個請求都需要創建自己的連接,所以我想知道是否有太多對System.getenv("key");調用System.getenv("key"); 是性能問題嗎?

這樣做的想法來自本文: http : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-rds.html#java-rds-javase

擁有這樣的東西將是一個更好的選擇:

public class EnvironmentHelper {
    static final String URL;
    static final String USERNAME;
    static final String PASSWORD;

    static {
        URL = System.getenv("URL");
        USERNAME = System.getenv("USERNAME");
        PASSWORD = System.getenv("PASSWORD");
    }
}

這樣,我只加載一次變量,對嗎? 無論我收到多少請求。

System.getEnv(name)轉換為ProcessEnvironment.getEnv ,它實際上是對HashMap的查找(ProcessEnvironment是HashMap的擴展)。此HashMap加載在運行於類初始化的靜態塊中,因此查找起來非常快是O(1)的可能性很高。

與每個請求創建一個新連接相比,我懷疑對getenv的調用會帶來更大的性能問題,但是我相信,如果使用上面使用的靜態加載方法來解決問題,那將是最好的方法。 這樣就消除了為每個新連接搜索環境列表的任務。

根據getenv函數操作系統手冊 ,它確實需要搜索環境列表以找到該值,但是根據我的C知識,我知道這不需要系統調用,因為將環境變量復制到了程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM