小编Tom*_*ine的帖子

解释Java反射性能:为什么它的速度非常快?

我已经看到其他线程说java反射性能比使用非反射调用慢10-100倍.

我在1.6中的测试表明情况并非如此,但我发现了一些其他有趣的东西,我需要有人向我解释.

我有实现我的界面的对象.我做了三件事1)使用对象的引用我将该对象转换为接口并通过接口调用方法2)使用对实际对象的引用直接调用方法,3)通过反射调用方法.我看到#1接口调用最快,紧接着是#3反射,但我注意到直接方法调用是最慢的一个很好的边缘.

我不明白,我会期望直接调用最快,然后接口,然后反射会慢得多.

Blah和ComplexClass与主类位于不同的包中,并且都有一个doSomething(int x)方法,它实现了接口并只打印整数x.

下面是我的结果(以毫秒时间,导致非常相似的W /多次试验):直接调用的方法:107194直接从对象铸造调用方法到接口:89594通过反射调用一个方法:90453

这是我的代码:

public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        Blah x = new Blah();
        ComplexClass cc = new ComplexClass();
        test((Object) x, cc);
    }

    public static void test(Object x, ComplexClass cc)
    {
        long start, end;
        long time1, time2, time3 = 0;
        int numToDo = 1000000;
        MyInterface interfaceClass = (MyInterface) x;

        //warming up the cache
        for (int i = 0; i < numToDo; …
Run Code Online (Sandbox Code Playgroud)

java reflection performance interface

7
推荐指数
1
解决办法
6819
查看次数

反跨域政策的重点是什么?

为什么HTML DOM和/或Javascript的创建者决定不允许跨域请求?

我可以看到禁止它的一些非常小的安全性好处,但从长远来看,似乎是尝试使Javascript注入攻击具有更少的权力.无论如何,这对JSONP来说都是没有意义的,它只是意味着javascript代码更难以制作,你必须有服务器端合作(尽管它可能是你自己的服务器)

javascript security dom cross-domain same-origin-policy

7
推荐指数
2
解决办法
682
查看次数

为什么此代码会生成"潜在资源泄漏"警告?

Eclipse(Juno)发出以下警告:

潜在的资源泄漏:'os'可能不会被关闭

try在此代码中正文的第一行:

static void saveDetails(byte[] detailsData) {
    OutputStream os = null;
    try {
        os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);
        os.write(detailsData);
    } catch (IOException e) {
        Log.w(LOG_TAG, "Unable to save details", e);
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException ignored) {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

openFileOutput声明该方法抛出一个FileNotFoundException.

这是误报吗?这似乎是一个相当普通的执行路径分析.

java eclipse warnings static-analysis resource-leak

7
推荐指数
1
解决办法
4738
查看次数

Java弹出窗口说应用程序包含无符号和签名代码

我正在使用运行Java 1.7.0_21的Mac 10.7.我正在尝试运行已签名的Java applet应用程序,并且在应用程序结束时,我得到一个混合模式安全弹出窗口"阻止可能不安全的组件被运行?".我正在使用的所有罐子都签了名.

我可以在运行Java 6的Mac 10.6上运行相同的applet应用程序,但我没有得到混合模式警告.我也可以在Windows上运行应用程序而不会出现混合模式警告.

当我的所有罐子都签名后,为什么我会一直收到这个错误?

我用谷歌搜索混合模式警告,发现此链接.

http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html#manifest

看完这个链接后,我有点困惑.根据此链接,我看起来需要在清单文件中提到"Trusted-Only"或"Trusted-Library"属性.我查看了我的清单文件,他们没有这些属性,所以我应该把它们放进去,或者只是罐子签名应该已经足够了.

有人可以请帮助我理解为什么即使一切都签名我都会收到此错误?

java security warnings mode mixed-code

7
推荐指数
1
解决办法
2万
查看次数

用于将非Java转换为Java源的工具

是否有任何好的工具可以自动将非Java源代码转换为Java源代码?

我并不期待一些完美的东西,只是为了让最糟糕的工作得到解决.

我猜有一个滑动难度.C#应该相对容易(只要忽略所有库).(写得好)C++不是那么糟糕.C需要做一点OO.(静态类型)函数语言可能很容易理解.动态OO语言可能需要非本地分析.

java compiler-construction

6
推荐指数
2
解决办法
2648
查看次数

JTextField上的setBorder不起作用?还是吗?

代码是这样的:

JTextField txt = new JTextField();
txt.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.red));
Run Code Online (Sandbox Code Playgroud)

但是文本字段忽略了我的调用setBorder.没有任何改变.

我要替换它JLabel(例如)

JLabel txt = new JLabel();
txt.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.red));
Run Code Online (Sandbox Code Playgroud)

我会看到红色边框.

谁能告诉我为什么?或者甚至更好地向我解释如何添加边框JTextField

java swing jtextfield

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

帮助理解jstack输出

我有一个桌面Java/Swing应用程序,它通过Java Webstart部署(客户端在XP上使用Java 6u20).我收到了申请暂停用户的间歇性报告.我设法在挂起期间登录到这样的系统,发现没有绘制UI(就像EDT被阻止一样).

我用jstack列出了线程; 我没有看到任何关于输出的死锁的提及,因为我对jstack很新,​​我不确定我还应该寻找什么.

我必须编辑堆栈跟踪以使其适合stackoverflow限制,希望没有遗漏任何重要意义.

谢谢,
菲尔

Full thread dump Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing):

"AWT-EventQueue-0" prio=6 tid=0x03e3f000 nid=0xe44 in Object.wait() [0x0516f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at java.awt.EventQueue.getNextEvent(Unknown Source)
    - locked <0x1d4b91d8> (a java.awt.EventQueue)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    <SNIP>

   Locked ownable synchronizers:
    - None

"ServerThread" prio=6 tid=0x058f7c00 nid=0xa08 waiting for monitor entry [0x055be000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.sun.deploy.security.CPCallbackHandler$ParentCallback.check(Unknown Source)
    - waiting to lock <0x1d485f80> (a com.sun.deploy.security.CPCallbackHandler$ParentCallback)
    at com.sun.deploy.security.CPCallbackHandler$ParentCallback.access$1400(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java locking jstack mixed-code

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

Java synchronized关键字是否刷新缓存?

仅限Java 5及以上版本.假设一个多处理器共享内存计算机(你现在可能正在使用它).

这是一个单例的延迟初始化代码:

public final class MySingleton {
  private static MySingleton instance = null;
  private MySingleton() { } 
  public static MySingleton getInstance() {
    if (instance == null) {
      synchronized (MySingleton.class) {
        if (instance == null) {
          instance = new MySingleton();
        }
      }
    }
    return instance;
  }
}
Run Code Online (Sandbox Code Playgroud)

是否instance必须声明volatile,以阻止优化重写的getInstance()如下(这将是一个连续的程序是正确的):

public static MySingleton getInstance() {
  if (instance == null) {
    synchronized (MySingleton.class) {
      // instance must be null or we wouldn't be here  (WRONG!)
      instance = new MySingleton(); …
Run Code Online (Sandbox Code Playgroud)

java volatile synchronized double-checked-locking

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

可选或默认通用参数

假设我有 3 个通用参数:

  public static interface Mapper<V,T,E> {
    public void map(KeyValue<V> v, AsyncCallback<T,E> cb);
  }
Run Code Online (Sandbox Code Playgroud)

如何使参数可选?如果用户只提供第一个参数,如何为参数提供默认值?

使用 TypeScript,它看起来像:

  public static interface Mapper<V,T = any,E = any> {
    public void map(KeyValue<V> v, AsyncCallback<T,E> cb);
  }
Run Code Online (Sandbox Code Playgroud)

因此,如果用户不提供 T 和 E,它们将默认为any。有没有办法用 Java 来做到这一点?

java generics typescript optional-typing gradual-typing

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

为什么JMS中默认不包含JMS?

JMS API不像JDBC那样是JDK 6的一部分.为什么JMS不是JDK的一部分?是因为很老,没有进展吗?

java jms

5
推荐指数
3
解决办法
4307
查看次数