冷月葬花魂 发表于 2015-1-18 11:19:38

了解下JAVA的ejb与java序列化(1) 发明并剖析成绩

再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。
这是到场新公司后接办的第一个项目,利用weblogic9.2+ejb2.0,压力测试时发明速率十分慢,呼应工夫很不睬想,反省日记发明,某些ejb互相挪用时办法挪用的工夫十分长,高达300-500毫秒。十分夸大,由于两个日记之间只是距离了一个ejb挪用。经由过程threaddump剖析后发明有相称多的线程在wait,反省线程挪用绽发明是在将参数举行序列化时,线程试图加锁可是锁被占用,因而处于守候形态。思索到threaddump的这一刹时,有多达30-50个线程都在同时试图在统一个锁上加锁,很分明这里的锁合作十分严峻。
因而激烈嫌疑是java的序列化机制招致的成绩,因为weblogic/ejb之类的太庞大不便利测试,因而独自写了一个类来摹拟这类场景:
1.有大批线程在运转,时代都有序列化的操纵
2.被序列化的对象对照年夜,有大批子对象(子对象的子对象...)
运转测试代码,成绩重现,测试用开了50个线程,threaddump并剖析threaddump信息,发明49个线程处于waiting形态,只要一个线程在干活!因而抛开weblogic/ejb独自剖析java的序列化机制,起首看threaddump的线程信息:
占据锁的线程:
"testthread21"prio=6tid=0x0ad2d3b8nid=0x224runnable
atjava.io.ObjectStreamClass.processQueue(UnknownSource)
atjava.io.ObjectStreamClass.lookup(UnknownSource)
atjava.io.ObjectOutputStream.writeObject0(UnknownSource)
atjava.io.ObjectOutputStream.writeObject(UnknownSource)
atjava.util.ArrayList.writeObject(UnknownSource)
atsun.reflect.GeneratedMethodAccessor1.invoke(UnknownSource)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)
atjava.lang.reflect.Method.invoke(UnknownSource)
atjava.io.ObjectStreamClass.invokeWriteObject(UnknownSource)
atjava.io.ObjectOutputStream.writeSerialData(UnknownSource)
atjava.io.ObjectOutputStream.writeOrdinaryObject(UnknownSource)
atjava.io.ObjectOutputStream.writeObject0(UnknownSource)
atjava.io.ObjectOutputStream.writeObject(UnknownSource)
attest.Test.test(Test.java:68)
attest.Test.run(Test.java:53)
atjava.lang.Thread.run(UnknownSource)
守候加锁的线程之一:"testthread49"prio=6tid=0x0ad9a508nid=0xa9cwaitingformonitorentry
atjava.lang.ref.ReferenceQueue.poll(UnknownSource)
-waitingtolock<0x02fb1d40>(ajava.lang.ref.ReferenceQueue$Lock)
atjava.io.ObjectStreamClass.processQueue(UnknownSource)
atjava.io.ObjectStreamClass.lookup(UnknownSource)
atjava.io.ObjectOutputStream.writeObject0(UnknownSource)
atjava.io.ObjectOutputStream.writeObject(UnknownSource)
atjava.util.ArrayList.writeObject(UnknownSource)
atsun.reflect.GeneratedMethodAccessor1.invoke(UnknownSource)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)
atjava.lang.reflect.Method.invoke(UnknownSource)
atjava.io.ObjectStreamClass.invokeWriteObject(UnknownSource)
atjava.io.ObjectOutputStream.writeSerialData(UnknownSource)
atjava.io.ObjectOutputStream.writeOrdinaryObject(UnknownSource)
atjava.io.ObjectOutputStream.writeObject0(UnknownSource)
atjava.io.ObjectOutputStream.writeObject(UnknownSource)
attest.Test.test(Test.java:68)
attest.Test.run(Test.java:53)
atjava.lang.Thread.run(UnknownSource)
能够发明成绩产生在类java.io.ObjectStreamClass中的办法processQueue()办法中:staticvoidprocessQueue(ReferenceQueue<Class<?>>queue,
ConcurrentMap<?extends
WeakReference<Class<?>>,?>map)
{
Reference<?extendsClass<?>>ref;
while((ref=queue.poll())!=null){
map.remove(ref);
}
}
这里的queue.poll()有加锁,持续跟进poll()的代码:publicReference<?extendsT>poll(){
if(queueEmpty)returnnull;
synchronized(lock){
returnreallyPoll();
}
}
<p>
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。

再现理想 发表于 2015-1-20 20:29:16

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

分手快乐 发表于 2015-1-21 10:36:22

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

莫相离 发表于 2015-1-25 11:53:49

是一种使网页(Web Page)产生生动活泼画面的语言

愤怒的大鸟 发表于 2015-2-2 21:55:52

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

金色的骷髅 发表于 2015-2-7 19:23:51

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

乐观 发表于 2015-3-7 05:38:46

是一种使网页(Web Page)产生生动活泼画面的语言

简单生活 发表于 2015-3-8 17:48:24

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

变相怪杰 发表于 2015-3-11 15:22:27

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

活着的死人 发表于 2015-3-13 04:07:08

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

蒙在股里 发表于 2015-3-20 11:45:15

Java 编程语言的风格十分接近C、C++语言。
页: [1]
查看完整版本: 了解下JAVA的ejb与java序列化(1) 发明并剖析成绩