小编Joh*_*ood的帖子

Java异常有多慢?

问题:Java中的异常处理实际上是否很慢?

传统观念以及许多谷歌搜索结果表明,不应将特殊逻辑用于Java中的正常程序流程.通常有两个原因,

  1. 它确实很慢 - 甚至比常规代码慢一个数量级(给出的原因各不相同),

  1. 它很混乱,因为人们只希望在特殊代码中处理错误.

这个问题是关于#1.

例如,这个页面将Java异常处理描述为"非常慢",并将缓慢与异常消息字符串的创建联系起来 - "然后将此字符串用于创建抛出的异常对象.这并不快." Java中的有效异常处理这篇文章说"其原因在于异常处理的对象创建方面,从而使异常本身变得缓慢".另一个原因是堆栈跟踪生成减慢了它的速度.

我的测试(使用Java 1.6.0_07,Java HotSpot 10.0,在32位Linux上)表明异常处理并不比常规代码慢.我尝试在循环中运行一个执行一些代码的方法.在方法结束时,我使用布尔值来指示是返回还是抛出.这样实际处理是一样的.我尝试以不同的顺序运行方法并平均我的测试时间,认为它可能是JVM升温.在我的所有测试中,投掷至少与返回一样快,如果不是更快(最多快3.1%).我对我的测试错误的可能性持开放态度,但我没有看到代码示例,测试比较或过去一两年中显示Java中的异常处理的结果慢.

让我沿着这条路走下去的是我需要使用的API,它将异常作为正常控制逻辑的一部分.我想在他们的使用中纠正它们,但现在我可能无法做到.相反,我是否必须赞美他们的前瞻性思维?

即时编译中的高效Java异常处理文章中,作者建议单独存在异常处理程序,即使没有抛出异常,也足以阻止JIT编译器正确优化代码,从而减慢它的速度.我还没有测试过这个理论.

java performance exception-handling

471
推荐指数
10
解决办法
7万
查看次数

OSGi WeavingHook示例

有没有人有使用OSGi 4.3+ Weaving Hook服务的例子?使用AspectJ,ASM,JavaAssist怎么样?有人在使用OSGi WeavingHooks吗?

OSGi Core 5.0.0第56.2节中的示例简单地省略了实际的编织,并说"最后的编织留给了读者".

我的目标是:

  1. 创建一个可以放在字段(基元或对象)上的注释(@MyAnnotation).
  2. 创建一个org.osgi.framework.hooks.weaving.WeavingHook来编织带有该注释的类
  3. 使用加载时编织在具有该注释的任何字段修改处切入
  4. 触发已修改字段的EventAdmin事件.
  5. 从WeavingHook动态更新捆绑线路,以连接到EventAdmin捆绑包.

我的问题主要是#3.

我目前正在尝试使用AspectJ WeavingAdaptor进行编织,但是我在使用方面库时遇到了问题,因为它期望构造函数中的java.net.URL [] aspectURLs是jar或目录它可以在文件系统上找到,而不是捆绑.另外,我不知道如何通过回调的处理由韦弗产生的任何新类acceptClass(字符串名称,字节[])的方法GeneratedClassHandler.

也许WeavingAdaptor不适合开始编织?或者也许我不应该使用AspectJ?

MyAnnotation.java

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
Run Code Online (Sandbox Code Playgroud)

MyWeavingHook.java

public class MyWeavingHook implements WeavingHook {

    public class MyWeavingClassloader implements WeavingClassLoader {

        private Bundle b;

        public MyWeavingClassLoader(Bundle b) {
            this.b = b;
        }

        void acceptClass(java.lang.String name, byte[] bytes) {
            //no way to get this back into the woven classes bundle classloader?
        } 

        URL[] getAspectURLs() …
Run Code Online (Sandbox Code Playgroud)

java aop osgi aspectj load-time-weaving

12
推荐指数
1
解决办法
3887
查看次数

您使用什么开发和构建生命周期工具?

我正在努力将目前约20名开发人员的项目转换为现代化的开发和构建环境.我们目前使用基于RCS的源控制系统和相关的问题跟踪系统,两者都使用Motif UI.没有正式的生产构建过程,它只是有效的.

我对......感兴趣:

  • 开发工具
  • 版本控制
  • 问题跟踪
  • 依赖管理
  • 配置管理
  • 自动化建筑
  • 自动化测试
  • 持续集成
  • 工件管理
  • 发布管理
  • 部署管理
  • 要求追踪
  • 还有什么?

我不仅对您使用的工具感兴趣,而且对它们之间的集成程度,设置和使用的容易程度以及开发人员和管理人员如何喜欢它们感兴趣.我们的项目是Java,C++和VHDL的组合,但我仍然希望听到其他语言的人.我现在正走在日食,颠覆,trac,maven,hudson和nexus的道路上.

此外,还有比"构建生命周期"更好的术语,它不仅包括构建,还包括从开发人员创建代码到构建,测试和生产系统时的代码流程?"构建生命周期"似乎有限,但"项目生命周期"已经被采用.

build-automation build-process

10
推荐指数
1
解决办法
1026
查看次数

如何设置Java以使用Eclipse的用户特定证书?

我无法相信我是唯一一个遇到这个问题的人.我一直在谷歌搜索几个小时,没有运气.Java安全文档似乎没有彻底解决PKCS12证书.

我正在尝试为用户特定的PKCS12证书设置Java.除此之外,还将使用它,以便在Eclipse中,我可以访问通过证书进行身份验证的Trac服务器.我正在使用Trac Mylyn集成插件进行eclipse.

这是设置:

  • 用户主目录位于/ home
  • 多用户安装在/中央
  • 每个用户都有一个个人证书:〜/ user.p12
  • 个人证书的密码是:pass1234
  • 用户密码存储在〜/ password.txt的0400文件中
  • ca的只读信任存储位于:/central/ca.jks
  • 没有信任库的密码
  • JDK 1.6安装在/central/jdk_1.6.0
  • Eclipse 3.4安装在/central/eclipse_3.4.0
  • JAVA_HOME = /中央/ jdk_1.6.0
  • JAVA_HOME设置为JDK位置,因为Eclipse需要它
  • ECLIPSE_HOME = /中央/ eclipse_3.4.0
  • JRE住在$ JAVA_HOME/jre
  • 每个用户都有一个〜/ .java.policy文件
  • 有一个运行在https://trac.internal/trac的trac服务器
  • trac服务器使用证书进行身份验证

现在,我希望能够让每个用户只修改他们拥有的某个文件(例如〜/ .java.policy文件),并能够启动中央Eclipse应用程序并访问Trac存储库.看起来很简单.

现在,我可以得到这个工作的唯一方法是编辑$ ECLIPSE_HOME/eclipse.ini文件,并添加

-Djavax.net.ssl.keyStore="/home/user/user.p12"
-Djavax.net.ssl.keyStoreType="PKCS12"
-Djavax.net.ssl.keyStorePassword="pass1234"
-Djavax.net.ssl.trustStore="/central/ca.jks"
Run Code Online (Sandbox Code Playgroud)

好的,这有效,但有两个问题:

  • 每个用户都必须安装自己的ecipse.(或者可以从用户文件中读取它?)
  • 它特定于Eclipse,我最终希望将其作为Java配置.

另外,我记得有一段时间你可以编辑$ JAVA_HOME/jre/lib/security/java.security文件并添加

keystore=/home/user/user.p12
keystore.type=PKCS12
keystore.password=pass1234
truststore=/central/ca.jks
Run Code Online (Sandbox Code Playgroud)

但Eclipse似乎没有选择它.可能是因为我的JAVA_HOME指向JDK,而不是JDK的嵌套JRE?

我见过引用以下属性的Java PKCS#11 Reference:keyStoreURL ="NONE"keyStoreType ="PKCS11"keyStorePasswordURL = some_pin_url

我看到另一个引用说你可以编辑〜/ .java.policy文件来包含:

keyStore "file:///home/user/user.p12", "PKCS12", "SunJSSE";
keyStorePasswordUrl "file:///home/user/password.txt";
Run Code Online (Sandbox Code Playgroud)

但这也没有被提升.也许它实际上是有效的,并且由于java.security文件不起作用的原因而没有被读取,或者它可能根本不起作用.

我见过的一些系统属性:

javax.net.ssl.keyStore="/home/user/user.p12"
javax.net.ssl.keyStoreType="PKCS12"
javax.net.ssl.keyStorePassword="password"
javax.net.ssl.keyStoreProvider="SunJSSE"
javax.net.ssl.trustStore="/home/user/ca.jks"
javax.net.ssl.trustStoreType="JKS"
javax.net.ssl.trustStorePassword=""
javax.net.ssl.trustStoreProvider="Sun" …
Run Code Online (Sandbox Code Playgroud)

java eclipse security trac pkcs#12

9
推荐指数
1
解决办法
3万
查看次数

Aries管理服务工厂是否也管理物业?

我在Servicemix 4.3.1中使用Apache Aries 0.2并创建cm:managed-service-factory.使用.cfg文件创建服务工作正常(#ARIES-584除外),但.cfg文件中的属性不会注入服务对象.它们确实在ConfigAdmin中正确设置,只是我的bean setter方法永远不会调用我的配置文件中的值.

我以为我应该使用cm:托管属性或类似嵌套在我的托管服务工厂中的东西,但这需要一个单独的pid,所以似乎不对.

如果我没有放入属性标记,则不会设置任何值.使用属性标记,然后只设置默认值,但从不实际配置文件值.

我找不到任何使用Aries CM子项目的文档,但blueprint-sample.xml除外,它没有在托管服务工厂内显示托管属性.我一直在尝试使用Servicemix,但是在每个角落都缺少文档,功能损坏或丢失,或者影响核心功能的错误.

无论是春季双子座的文件表明,他们的托管服务工厂实现也应作为管理的属性.


foo.xml:

<blueprint>
  <cm:managed-service-factory id="myfoo-msf" factory-pid="my.msf" interface="my.IFoo">
    <cm:managed-component class="my.Foo"> 
      <property name="name" value="default />
    </cm:managed-component>
  </cm:managed-service-factory>
</blueprint>
Run Code Online (Sandbox Code Playgroud)

IFoo.java

package my;
public interface IFoo {
  public String getName();
  public void setName(String name);
}
Run Code Online (Sandbox Code Playgroud)

Foo.java

package my;
public class Foo implements IFoo {
  private String name;
  public void setName(String name) {
    this.name = name;
    System.out.println("name set to: " + name);
  }
  public String getName() {
    return …
Run Code Online (Sandbox Code Playgroud)

java apache osgi blueprint aries

6
推荐指数
1
解决办法
2133
查看次数