繁体   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