Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
Java11之前的java.lang.·System.getProperty() 对性能有影响
21-10-19
banq
'java.lang.System.getProperty()' 是 Java 开发人员用来读取在应用程序启动期间配置的系统属性的常用 API。即,当您将“-DappName=buggyApp”作为应用程序的启动 JVM 参数传递时,可以通过调用“java.lang.System.getProperty()”来读取“appName”系统属性的值。
“java.lang.System.getProperty()”API 底层使用“java.util.Hashtable.get()”API。请注意,'java.util.Hashtable.get()' 是一个同步 API。这意味着在任何给定时间只有一个线程可以调用“java.util.Hashtable.get()”方法。如果新线程在第一个线程仍在执行时尝试调用“java.util.Hashtable.get()”API,则新线程将处于 BLOCKED 状态。当线程处于 BLOCKED 状态时,它将无法前进。只有当第一个线程完成执行'java.util.Hashtable.get()' API 时,新线程才能继续前进。因此,如果在关键代码路径中调用“java.lang.System.getProperty()”或“java.util.Hashtable.get()”,则会影响事务的响应时间。
以下是解决此问题的潜在解决方案:
1. 升级到 JDK 11:
从 JDK 11 开始,java.util.Properties 中的 Synchronized 'HashTable' 已替换为 'ConcurrentHashMap'。因此,当您升级到 JDK11 时,您将不会遇到此问题。
2.缓存值:
在大量应用程序中,系统属性在运行时不会改变。在这种情况下,我们不必在每个事务上都继续调用“java.lang.System.getProperty()”API。相反,我们可以调用一次“java.lang.System.getProperty()”API,缓存它的值,并在以后的所有调用中返回缓存的值。
性能调优
java11