我已经看到其他线程说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) 为什么HTML DOM和/或Javascript的创建者决定不允许跨域请求?
我可以看到禁止它的一些非常小的安全性好处,但从长远来看,似乎是尝试使Javascript注入攻击具有更少的权力.无论如何,这对JSONP来说都是没有意义的,它只是意味着javascript代码更难以制作,你必须有服务器端合作(尽管它可能是你自己的服务器)
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 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源代码转换为Java源代码?
我并不期待一些完美的东西,只是为了让最糟糕的工作得到解决.
我猜有一个滑动难度.C#应该相对容易(只要忽略所有库).(写得好)C++不是那么糟糕.C需要做一点OO.(静态类型)函数语言可能很容易理解.动态OO语言可能需要非本地分析.
代码是这样的:
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应用程序,它通过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 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) 假设我有 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 来做到这一点?
JMS API不像JDBC那样是JDK 6的一部分.为什么JMS不是JDK的一部分?是因为很老,没有进展吗?
java ×9
mixed-code ×2
security ×2
warnings ×2
cross-domain ×1
dom ×1
eclipse ×1
generics ×1
interface ×1
javascript ×1
jms ×1
jstack ×1
jtextfield ×1
locking ×1
mode ×1
performance ×1
reflection ×1
swing ×1
synchronized ×1
typescript ×1
volatile ×1