gpt4 book ai didi

java - 使用 SecurityManager 的性能损失是多少(如果有的话)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:36 25 4
gpt4 key购买 nike

使用 SecurityManager 时是否会降低性能?

我需要以下内容:

public class ExitHelper {

public ExitHelper() {

System.setSecurityManager(new ExitMonitorSecurityManager());

}

private static class ExitMonitorSecurityManager extends SecurityManager {

@Override
public void checkPermission(Permission perm) {}

@Override
public void checkPermission(Permission perm, Object context) {}

@Override
public void checkExit( final int status ) {
// this is the part I need and I don't care much about the performance issue of this method
}
}

这会对我的计划产生巨大影响吗?

例如,该程序确实会打开很多文件。如果我启用 SecurityManager 并在其中放置一些日志记录,我可以看到这些方法被调用了很多次。真的很多。如此之多,以至于在这两种方法的日志记录中丢失了正常的日志记录。因此,将 SecurityManager 放置到位似乎意味着要进行大量调用。它会比默认的 SecurityManager 慢吗? (有没有默认的?)

这是如何运作的?将检查程序的哪一部分的权限以及多久检查一次?我很关心这两个checkPermission(...) 方法。

最佳答案

存在性能损失,但可能很小,因为:

  • 它仅在您尝试进行某种形式的需要权限检查的 Activity 时适用。
  • 大多数需要权限检查的操作都是昂贵的操作(IO、网络访问等),因此安全检查的开销很可能只占总运行时间的很小一部分。
  • 支票本身可以很便宜地制作

特别要注意的是,安全检查的调用代码在 Java 库代码中通常非常轻量级,例如:

 SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkXXX(argument, . . . );
}

如果您的安全管理器代码本身同样是轻量级的,那么安全检查的运行时成本应该可以忽略不计。不过,我会避免将任何日志记录代码放在 SecurityManager 本身中 - 这会很昂贵并且可能属于您的应用程序代码中的更高级别。

如果您想绝对减少安全管理器对您不关心的权限的开销,那么您应该覆盖您不需要的特定 checkXXX 方法,例如:

@Override 
public void checkRead(String file) {
// empty method as we are happy to allow all file reads
}

最终您将不得不针对您的特定情况进行基准测试,但“直觉”答案是您真的不应该为此担心。

关于java - 使用 SecurityManager 的性能损失是多少(如果有的话),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com