仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 737|回复: 10
打印 上一主题 下一主题

[学习教程] 了解下JAVA的ejb与java序列化(1) 发明并剖析成绩

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?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[0x0b48f000..0x0b48fce4]
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[0x0bb8f000..0x0bb8fbe4]
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)产生生动活泼画面的语言
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-2 21:55:52 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
金色的骷髅 该用户已被删除
6#
发表于 2015-2-7 19:23:51 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
乐观 该用户已被删除
7#
发表于 2015-3-7 05:38:46 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
简单生活 该用户已被删除
8#
发表于 2015-3-8 17:48:24 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
变相怪杰 该用户已被删除
9#
发表于 2015-3-11 15:22:27 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
活着的死人 该用户已被删除
10#
发表于 2015-3-13 04:07:08 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
蒙在股里 该用户已被删除
11#
发表于 2015-3-20 11:45:15 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 05:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表