小编Cla*_*Bao的帖子

如果它在PRODUCTION环境中,那么调试死锁问题的正确行动计划是什么?

注意我不是在问死锁的概念.我感兴趣的是,如果您在生产群集服务器中的Java应用程序中遇到此问题并具有调试技巧,您将采取什么措施.

  • 关于分析步骤的计划的最佳实践.

假设

  • 你已经知道一个服务器遇到了这个问题.
  • 操作系统正在使用Linux.

目标

  • 您想知道根本原因并修复它.

java debugging concurrency

5
推荐指数
1
解决办法
783
查看次数

如何使J2EE Web应用程序脱机工作?

我想让我的Web应用程序能够脱机工作,一旦它上线或再次连接,它就应该能够在离线模式下传输用户所做的修改.

我已经看到Google Gears是我的问题的理想解决方案,不建议使用它,因为它现在已被弃用.

在使用技术和应用程序设计方面,使我的应用程序脱机工作的好方法是什么?

java java-ee

5
推荐指数
1
解决办法
3542
查看次数

如何使用Jackson序列化/反序列化第三方Java对象

作为一个例子,我想使用Jackson 序列化/反序列化Slick2d的Animation类的一个对象.最简单的方法是什么?

java serialization jackson deserialization

4
推荐指数
1
解决办法
3685
查看次数

任何人都可以将这个C++代码(从OpenJDK6)解释为普通英语吗?

这是OpenJDK6的hotspot/src/share/vm/prims/unsafe.cpp代码片段(从第1082行开始):

// JSR166 ------------------------------------------------------------------

UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h))
  UnsafeWrapper("Unsafe_CompareAndSwapObject");
  oop x = JNIHandles::resolve(x_h);
  oop e = JNIHandles::resolve(e_h);
  oop p = JNIHandles::resolve(obj);
  HeapWord* addr = (HeapWord *)index_oop_from_field_offset_long(p, offset);
  if (UseCompressedOops) {
    update_barrier_set_pre((narrowOop*)addr, e);
  } else {
    update_barrier_set_pre((oop*)addr, e);
  }
  oop res = oopDesc::atomic_compare_exchange_oop(x, addr, e);
  jboolean success  = (res == e);
  if (success)
    update_barrier_set((void*)addr, x);
  return success;
UNSAFE_END
Run Code Online (Sandbox Code Playgroud)

还添加了关键方法oopDesc :: atomic_compare_exchange_oop.

 inline oop oopDesc::atomic_compare_exchange_oop(oop exchange_value,
                                                    volatile HeapWord …
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface openjdk jvm compare-and-swap

4
推荐指数
1
解决办法
580
查看次数

从java.util.Date中删除时间部分的正确方法是什么?

我想实现一个线程安全的函数来从java.util.Date中删除时间部分.

我试过这种方式

private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
public static Date removeTimeFromDate(Date date) {
        Date returnDate = date;

        if (date == null) {
            return returnDate;
        }

        //just have the date remove the time
        String targetDateStr = df.format(date);
        try {
            returnDate = df.parse(targetDateStr);
        } catch (ParseException e) {
        }

        return returnDate;
}
Run Code Online (Sandbox Code Playgroud)

并使用synchronized或threadLocal使其成为线程安全的.但它有更好的方法在Java中实现它.看来这种方式有点冗长.我对此不满意.

java date

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

使用hsqldb时,缓存的表不会缓存,而是在内存中

我正在尝试hsqldb 2.2.5版的缓存表功能.

只是使用JDBC批量插入到一个表中,奇怪的是如果我单独运行我的测试,虽然我使用了创建缓存表,但它仍然使用内存模式,因为在100,0000条记录之后,OOM.

但是,如果我在此测试用例或使用之前运行其他测试jdbc:hsqldb:mem:HSQLDB;hsqldb.default_table_type=cached ,它将使用缓存表.

无论如何,我不想使用缓存默认.

缓存表性能在2600000条记录之后 看起来如此 ,性能下降了不少.在3600000条记录之后,它变得非常缓慢

也许一些索引占用内存完全使JVM变得缓慢.不是因为db本身

两个子问题

1)强制缓存表的任何其他配置是否使用缓存模式?

2)任何db配置都有助于提高缓存表的性能?

(使用JDK1.6 -Xmx1024m)

caching hsqldb

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

ClassLoader.load(name)和Class.forName(name)之间的区别是什么

可能重复:
使用ClassLoader和Class.forName加载类之间的差异

AFAIK,java中提供了两种方法来从其名称初始化一个类.

  • public static Class forName(String className)抛出ClassNotFoundException

  • public static Class forName(String name,boolean initialize,ClassLoader loader)抛出ClassNotFoundException

  • ClassLoader:

    public class loadClass(String name)throws ClassNotFoundException {return loadClass(name,false); }

已知的是在forName方法中,我们可以将initialize的标志指定为false,这将跳过为该类初始化的一些静态事物.但还有什么呢?我应该如何正确使用它们?

你可以展示一些很好的例子.

谢谢!

更新:

提出问题之后,我做了一些简单的classLoader测试.

ClassLoader cls = ClassLoader.getSystemClassLoader(); 
        Class someClass = cls.loadClass("Test");         
        Class someClass0= Class.forName("Test");        
        Class someClass1= Class.forName("Test",false,cls);


        URL[] urls = new URL[] {new File("bin/").toURL()}; 
        ClassLoader cls2 = new URLClassLoader(urls, null); 
        Class someClass2 = cls2.loadClass("Test");         

        ClassLoader cls3 = new URLClassLoader(urls, cls); 
        Class someClass3 = cls3.loadClass("Test");         

       System.out.println(someClass.equals(someClass0));       
       System.out.println(someClass.equals(someClass1));
       System.out.println(someClass.equals(someClass2)); 
       System.out.println(someClass.equals(someClass3)); …
Run Code Online (Sandbox Code Playgroud)

java classloader

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

在MultiThread方面比较java和scala

我只是听到并看到有人说scala是为MultiThread设计的,尽管它实际上是出于通用目的.

它声称"事情是,虽然你可以在Java中创建线程安全的类(如果你知道你正在做什么),Scala让它变得简单而自然."

事实上,AKKA和Lift是用scala编写的.(实际上是java和scala)

但java在java.util.concurrent的新包中也在这方面做了改进.那么为什么AKKA和Lift出生在JAVA?

也许你会说scala使java看起来像C. :-)

任何人都可以对此有更深入的了解或深入的想法?

我知道可以混合使用JAVA和scala.Scala能够无缝地调用Java代码.那么java有什么,scala也是如此.

但是scala真正改进了java还没有完成,不管语法不同?

只有一些设计像演员/代理或其他什么?(注意Actors/Agents无法解决MultiThread中的所有问题.)

或者scala编译器和采用一些函数式语言语法真的比java更重要或帮助吗?

我听到一些消息称scala将能够采用XText.为了能够利用XText编写线程逻辑,不确定这是否属实.

Scala看起来像是语言的混合物,使用这种方法可以更加可扩展地解决这方面的问题?

UPDATE

感谢您从不同角度出色的答案.我认为他们都非常好.无论你站在哪一边.

编辑

下面的主题(在一年前的SO中)询问了类似的事情."建设性"结论非常相似.但这一次,一些新的观点可能会出现,我要问的方式有点不同.仅供参考.

有关:

其实我很感兴趣,有些人可以用一些全新的角度回答这个问题,这可以启发我的思想,提供一些未知的想法.

但由于没有建设性,它已经关闭了.:-)

java multithreading scala concurrent-programming

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

Char []到Byte []用于web中的输出优化(java)

我只是在一个来自infoq的经历分享演示中找到.它声称如果你将字符串转换为servlet中的byte [],它将增加QPS(每秒查询数?).代码示例显示了比较:

之前

private static String content = “…94k…”;
protected doGet(…){
response.getWrite().print(content);
}
Run Code Online (Sandbox Code Playgroud)

private static String content = “…94k…”;
Private static byte[] bytes = content.getBytes();
protected doGet(…){
response.getOutputStream().write(bytes);
}
Run Code Online (Sandbox Code Playgroud)

结果之前

  • 页面大小(K)94
  • 最大QPS 1800

结果之后

  • 页面大小(K)94
  • 最大QPS 3500

谁能解释为什么它被优化了?我相信这是真的.

UPDATE

如果我引起任何误导.我需要解释原始演示文稿仅以此为例.他们实际上通过这种方式重构速度引擎.BUt这个源代码有点长.

实际上在演示文稿中并没有暗示他们如何详细地做到这一点.但我发现了一些领先优势.

在ASTText.java中,他们缓存了byte [] ctext而不是char [] ctext,这大大提升了性能〜!

就像上面的方式一样.这很有道理,对吧?

(但是他们肯定也应该重构Node接口.Writer不能写byte [].这意味着使用OutputStream代替!)

正如Perception所建议的那样,Write最终委托给StreamEncoder.而StreamEncoder写入将首先将char []更改为byte [].然后将其委托给OutputSteam进行实际写入.您可以轻松参考源代码并进行验证.考虑到每次显示页面时都会调用render方法,节省的成本将相当可观.

StreamEncoder.class

 public class ASTText extends SimpleNode {
            private char[] ctext;
        /**
         * @param id
         */
        public ASTText(int id) {
            super (id);
        }

        /**
         * @param p
         * …
Run Code Online (Sandbox Code Playgroud)

java arrays performance velocity bytearray

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

如何在Java中创建具有特定格式的日期?

我有以下代码来处理日期

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss a"); 

String s = formatter.format(formatter.parse("10/11/2011 4:24:00 PM");
System.out.prinln(s);
Date d = (Date)formatter.parseObject(s);
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)

第一个打印行输出是: 10/10/2011 00:00:00 AM

第二个是: Mon Oct 10 00:00:00 GMT+02:00 2011

我怎样才能使第二个语句与第一个语句一样打印出来?

编辑

问题是如何用这种格式创建日期对象?

java string datetime date

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

如何同时加载文件时决定线程号

我正在编码来解决这样的问题.大约有50到200个小文件.这些文件的总大小不会很大.我的目标是同时将它们加载到一个表中.

似乎代码运行得很好,它确实比使用单线程更快.

但是,我有点不确定.打开与文件号一样多的线程是否是最好的选择?

另一件事是我只用最简单的方法来做多线程.这也是最好的选择吗?

任何建议或意见表示赞赏!

 for (int i = 0; i < threads.length; ++i) {
                        synchronized (threads[i]) {
                            threads[i].run();
                        }
                    }
                    for (int i = 0; i < threads.length; ++i) {
                        synchronized (threads[i]) {
                            try {
                                threads[i].join();
                            } catch (InterruptedException e1) {
                                 return;
                            }
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

将混凝土集合浇铸到其界面的性能成本

当我编写一些API时,它有时会用作Collection<Model>参数.当然,ArrayList如果您知道ArrayList已经足够处理所有用例,您可以使用.

我的问题是ArrayList<Model>,Collection<Model>当传递参数时,例如施放时,是否存在相当大的性能成本.

收集尺寸是否也会影响铸造性能?有什么建议?

谢谢Peter的回答.

我认为答案足以阻止我浪费时间去改变它.

编辑

如在接受的答案中所述,实际上在调用接口方法时支付了成本.保持这种灵活性并不是免费的.但成本并不那么可观.

java performance casting

0
推荐指数
1
解决办法
502
查看次数