View Mode: Normal | Article List

JVM内存模型以及垃圾回收

[ 2010-11-22 10:06:42 | Author: zhenhua ]
JVM内存模型以及垃圾回收
内存由 Perm 和 Heap 组成. 其中

Heap = {Old + NEW = { Eden , from, to } }

JVM内存模型中分两大块,一块是 NEW Generation, 另一块是Old Generation. 在New Generation中,有一个叫Eden的空间,主要是用来存放新生的对象,还有两个Survivor Spaces(from,to), 它们用来存放每次垃圾回收后存活下来的对象。在Old Generation中,主要存放应用程序中生命周期长的内存对象,还有个Permanent Generation,主要用来放JVM自己的反射对象,比如类对象和方法对象等。


垃圾回收描述:

在New Generation块中,垃圾回收一般用Copying的算法,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个Survivor Space, 当Survivor Space空间满了后, 剩下的live对象就被直接拷贝到Old Generation中去。因此,每次GC后,Eden内存块会被清空。在Old ...

Read More...

jvm 内存溢出问题的解决

[ 2010-11-18 22:19:15 | Author: zhenhua ]
java.lang.OutOfMemoryError: PermGen space

发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。

但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。

于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就 固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!

1、首先是:java.lang.OutOfMemoryError: Java heap space
...

Read More...

逃离 MVC

[ 2010-10-25 23:42:48 | Author: zhenhua ]
最近在公司做一个小功能, 由于时间迫切,用纯servlet/jsp的方式完成,仅花了半个多小时,恍惚之间不禁反思为什么要使用定死的传统的开发框架,而不用敏捷轻便的方式去实现一些功能,这些不需要任何解决方案、不用考虑action、xml、拦截器等。

之前来自JDON的一篇文章值得再次反思:http://zhenhua.org/article.asp?id=701

另:http://www.ibm.com/developerworks/cn/java/j-pureserv/index.html
Quote
这里演示的纯 servlet 设计在客户机和业务逻辑之间建立一个视图层。Model-View-Controller(MVC,或者说 Model 2)实际上不是万能的,而且支持它的 Web 框架往往比较难以处理。Spring MVC 和 JavaServer Faces(JSF)太过复杂,我可以断言,Struts 的麻烦程度不亚于此,每次调整控制逻辑时都必须调整臃肿复杂的配置文件。N. Alex Rupp 甚至将 MVC 称为反模式,一种 “看似聪明其实非常愚蠢的” Web 技术。
...

Read More...

10个行业小内幕

[ 2010-10-25 22:32:10 | Author: zhenhua ]
 这些内幕大多数是针对网络管理员、IT经理和桌面支持专业人士。虽然这些小内幕并不针对开发人员和程序员(这两类人员也有对应的小内幕。),但有些或许也适用于他们。

  10. 虽然IT业的薪酬比其他很多行业要好,但有公司因此视你为其“佣人”。

  尽管IT人士的薪水没有互联网泡沫之前要好,但和其他行业人士比较,IT人的薪资还算好点。在接下的几十年中,科技在商业和社会发展中所占分量会一直增加,所以我们完全有理由相信,IT专业人才的需求量也不会减少。

  然而,正因为IT人士的薪水普遍较高,所以有些公司认为给了你这么多钱,就把你看成是公司的“佣人”,拥有你的支配权,不管是不是在工作期间。
例子1:因为某人加班(遇到问题),你在晚上9点接到他/她的技术电话,你很可能会听到“这是你工作的一部分。”
例子2:为了避免工作期间的停工,你要在星期六花6小时来配置/升级软件,你很肯能又会听到“我们已经付给你大笔钱”。

  9. 有些用户明明错在自己,但他们还是会责怪你。

  有些用户在遇到问题,自己无法解决的时候,会对你展示他们深厚的“狮吼功”。他们会咆哮道,“这东西出了什么问题?上不了网!”或...

Read More...

程序员的故事:我们也是人

[ 2010-10-25 22:30:46 | Author: zhenhua ]
通常来说,和从事程序开发的同行们聊聊关于某个经理的糗事,或者某款编得一塌糊涂的软件,是一件非常有趣的事。面对困扰软件开发行业的菲薄待遇和缺乏竞争这两个问题,这是个应对方法。

我最近听说了一件事,让我着实一惊。一个开发人员和我分享了几个月前他找工作的经历。当时,他的长期合同到期了,公司暂不打算招人,所以他不得不找工 作。作为一名有竞争力的资深开发人员,他轻松拿到了两份Offer。虽然其中有份工作的薪水不如另一份高,但工作地点离家很近,并且他家小孩才两个月大, 所以他决定接受那份工作了。

他到公司报到后便开始了工作,后来要发工资了。结果他拿到的薪水比Offer中提到的要少得多。项目经理总是拿公司的财政制度说辞,但他是给一家大公 司工作,并且这家公司用来买办公室打印机墨粉的钱可能都比他的工资要多。实际情况是:项目经理是分包合约的,他只想从中取得更多钱而已。

事情就这样悲剧的发生了,而这仅仅是开始。那时,我见到了他,坦率的说,他并没有什么个人问题。事情经过是这样的:他所做的软件和系统中的另一部分对 接,而这部分也是那位项目经理负责的。因此,这位项目经理坚持认为,软件的性能问题是那位仁兄使用的码基导致的,而不是其他人。即便后来分析器验证并非如 ...

Read More...

带领团队发挥最大潜能的10个技巧

[ 2010-10-25 22:28:55 | Author: zhenhua ]
 引言:如果你领导的是知识型员工和IT项目经理,你有必要学习特殊的领导才能来带领员工,让他们做出创造性的贡献,并培养他们独立解决问题的能力。本文将介绍多种方法,你可以把这些方法付诸实践,从而引领你的团队发挥最大潜能。

  只有你团队的成员成功了,你才能算是成功的领导者。本文介绍一些基本领导技巧,以助你团队达到巅峰状态。这些技巧是针对那些IT行业管理知识型员工和项目经理的领导者。如果你是其他行业的领导者,虽然大多数技巧可以适用,但不能完全照搬。

  1 注重结果和效率,不是出勤时间

  当你管理知识型员工时,你不应该用硬性的打卡上班/下班时间,除非有涉及到客户服务的时间覆盖问题(比如,必须在呼叫时间内提供足够的服务)。相反,你应设立明确目标,让员工每周用40小时完成工作。要求他们准时参加重要的会议并且在团队共同工作时间内随叫随到。

  如果有必要,为他们提供可以远程工作的工具。然后,让他们自己管理自己的时间。这样做的结果就是告诉你的员工:你信任他们。如果你不能信任为你工作的人,那就是另外一件事了。严加管理直到你信任他们为止;或者告诉他们寻找其他的机会。
...

Read More...

[Hidden] [Hidden]

[ 2010-10-24 17:36:05 | Author: zhenhua ]
You don't have the permission to view this Article.