这是在eclipsepowered上看到的。 Ed提到了eclipse-dev committers mailing list中,Jerome Lanneluc 指出的一个String#substring和String(String)的问题。按照Jerome的说法,使用String#substring()的时候,原有的长字符串所占据的空间仍然被占据,并没有释放,使用String(String)可以解决这个问题。Jerome的原文:
I just noticed that String#substring(…) shares the underlying char array. So if you have a big string, take a substring of it, throw away the big string, you will still hold on the big char array. A simple way to solve this is to make a copy of the substring using the String(String) constructor.
I saved 550KB in JDT Core by changing the following code:
String simpleName =
fullyQualifiedName.substring(fullQualifiedName.lastIndexOf('.'));
to
String simpleName = new
String(fullyQualifiedName.substring(fullQualifiedName.lastIndexOf('.')));
Eclipse3.1发布以后,使用者发现,3.1占据了大量的Heap(大约200-300M)。Eclipse的开发小组正在不断地解决这个问题,而String#substing的改进,将在Eclipse 3.1M6中发布(4月1日)。
这个提示,其实也可以运用在我们自己的项目之中
[Note: This blog was migrated from my old CSDN blog.]
为什么重发这个blog呢?因为昨天看到Eclipse.org网站上关于Eclipse Performance的一个文档。这份文档主要是提示,在开发基于Eclipse的应用时(不管是Eclipse程序本身,还是Plug-in),在性能问题上需要注意的一些地方。其中,第一条就是如何使用substring()的问题。Eclipse 3.1M7以及RC1,都已经进行了这方面的调整,所以现在的Eclipse,对Heap的占用已经大幅减少,从而在性能上也有所提高。
Eclipse.org
eclipsepowered.org
Email this store to a friend (send a short email with a subject to this story)
Subscribe to kukooBlog (subscribe kukooBlog's RSS feed)
Send me feedback on this story
Eclipse,Java
Eclipse,Programming