存档

‘JAVA’ 分类的存档

Java GC 相关文章摘录

2011年12月3日 admin 没有评论
分类: JAVA 标签: ,

jdk 命令之jmap

2011年11月30日 admin 没有评论

Jmap的参考文档可以参考http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

jmap的常用命令入戏

jmap –histo:[live] <pid>

打印内存的直方图,记录java类的内存大小,数量…… live自选项表示只有live对象会被计算

jmap -dump:[live,]format=b,file=<filename> pid

将java heap中的信息导出到文件中。live自选项表示只有live对象会被计算。导出的文件可以用jhat或MAT来查看

分类: JAVA 标签:

转载:Java Concurrency 系列的文章

2011年11月27日 admin 没有评论
分类: JAVA 标签:

转载:JBOSS连接池系列

2011年11月5日 admin 没有评论
分类: JAVA 标签: ,

jdk 命令之jstat

2011年9月30日 admin 没有评论

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

语法结构:

Usage: jstat -help|-options

       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数解释:

Options — 选项,我们一般使用 -gcutil 查看gc情况

vmid    — VM的进程号,即当前运行的java进程号

interval– 间隔时间,单位为秒或者毫秒

count   — 打印次数,如果缺省则打印无数次

S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

分类: JAVA 标签:

Java Programming —Reference

2011年4月23日 admin 没有评论

如果想继续持有某个对象的引用,希望以后能够访问到该对象,但是也希望能够垃圾回收器释放它,这时就应该使用Reference对象。这样,你可以继续使用该对象,而在内存消耗殆尽的时候又允许释放该对象。以Reference对象作为你和普通引用之间的媒介,同时一定不能有普通的引用之星啊那个对象,这样就能达到上述目的。如果垃圾回收器发现某个对象是通过普通引用可获得的,该对象就不会被释放。

 image

引用类型 特征
软引用(Soft Reference) 主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证Java在抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常.
弱引用(Week Reference) 弱引用和软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收线程扫描它所管辖的内存区域的过程中,一旦发现只具有弱引用的对象,不管当前内存空间是否足够与否,都会回收它的内存。不过垃圾回收器是一个优先级很低的线程,因此不一定很快发现那些只具有弱引用的对象
虚引用(PhantomReference) 虚引用顾名思义就是形同虚设,与其他几种引用都不同,虚引用并不决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样。在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
   

WeakHashMap允许垃圾回收器自动清理“键”和“值”,所以它显得十分便利。对于向WeakHashMap添加“键”和“值”的操作,则没有什么特殊的要求。映射会自动使用WeakReference包装它们。允许清理元素的触发条件是,不再需要此“键”了。

分类: JAVA 标签:

jdk 命令之jar

2010年10月17日 admin 没有评论

jar命令是Jdk提供的用来处理jar、war包的工具,主要功能包括了创建、解压缩、查看jar包和war包.虽然我们通常使用Java的Build工具如Ant,Maven来生成jar包和war包。但在某些特殊场合(例如生产环境),基础的jar命令还是十分有帮助的。

用法

用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files …
选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。

样例

列出jar文件的内容

jar tf b2b.crm.martini.bundle.war-1.0-SNAPSHOT.war | findstr sql*

列出war文件的内容,并找到包含sql的内容

创建jar文件

将当前目录下的所以内容打包到example.jar并保存到当前目录.

jar cvf example.jar  .

当前目录下的所以内容打包到指定目录的example.jar中

jar cvf D:\example.jar  .

将指定目录下的内容打包成example.jar 并保存到指定目录

jar cvf D:\example.jar  -C D:\temp  .

 

更新jar文件

 

在已经存在的某个jar中间中增加内容。

向把D:\temp 下WEB-INF中的内容加入到D:\example.jar中.

jar uf D:\example.jar   -C D:\temp   WEB-INF

解压缩jar文件

解压缩jar中的所有文件到当前目录

jar xvf b2b.crm.martini.bundle.war-1.0-SNAPSHOT.war

解压缩jar中指定文件(META-INF,WEB-INF包括其子文件和目录)到当前目录

jar xvf b2b.crm.martini.bundle.war-1.0-SNAPSHOT.war META-INF WEB-INF

遗憾的是jar中居然没有将jar文件解压缩到指定目录的功能

 

参考资料

http://download.oracle.com/javase/6/docs/technotes/tools/solaris/jar.html

分类: JAVA 标签:

在Eclipse中用TODO标签管理任务

2010年5月2日 admin 5 条评论

很早以前写在Baidu Blog上,今天有用到,所以搬了过来。

Elipse为Java项目的时候,有一个很人性化的“任务管理”功能,利用这个功能可以方便地将项目中一些需要处理的任务记录下来。先来看看“任务管理”是怎么使用的吧。
下面这个类在Class和name 属性的comment中分别加入了一段FIXME 和TODO标签,在FIXME和TODO标签的候命 还跟上了一段文字来说明需要任务的内容。
/**
* FIXME
* @author Administrator
*
*/
public class User {
    //TODO 需要增加Javadoc
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
打开Eclipse中的任务窗口(Task View)

8fef4326f15d21348b82a168

在任务窗口中刚才定义的2个任务就会显示出来了。

8fef4326f14121348b82a14c

任务完成以后,可以通过点击编辑窗口的左边的【任务提示标记】将相应的任务标签删除,任务窗口中任务也会一并删除。

 ae963603fd609fcf09fa933e

Eclipse除了默认提供了3种任务标签(FIXME,TODO,XXX),参考下图,还可以支持自定义任务标签。 

进入Windows->Perferences->Java->Compile->Task Tags,我们就可以自定义任务标签,Eclipse中可以支持HIgh,Normal,Low三种级别的任务。

755409fccb85fcdefc037fd1

分类: JAVA 标签:

IntelliJ IDEA 使用总结

2010年3月6日 admin 4 条评论

一直来使用的都是Eclipse,不过现在的手上的那个项目用Eclipse开发和debug总是不爽,就有了换个IDE的想法。选择IntelliJ IDEA,也是因为之前也使用过一阵子IntelliJ IDEA。今天google了一些关于IntelliJ IDEA使用、配置方面的内容,并做个简单的记录。我使用的IntelliJ IDEA版本是8.x

性能优化

1.修改JVM参数

修改idea.exe.vmoptions配置文件调整以下内容:
-Xms256m
-Xmx384m
-XX:MaxPermSize=128m
-XX:NewRatio=4
-Xss128k
-Dsun.awt.keepWorkingSetOnMinimize=true
-server
-Xms256m设置初时的内存数,你需要设置一个合理的值, 增加该值可以提高Java程序的启动速度。如果你的内存够大,如2G,可以设置到400m。
-Xmx384m设置最大内存数,提高该值,可以减少内存Garage收集的频率,提高程序性能。
-Dsun.awt.keepWorkingSetOnMinimize=true可以让IDEA最小化到任务栏时依然保持以占有的内存,当你重新回到IDEA,能够被快速显示,而不是由灰白的界面逐渐显现整个界面,加快回复到原界面的速度。
-server控制内存garage方式,这样你无需在花一到两分钟等待内存garage的收集。

2.优化文件保存和工程加载

取消“Synchronize file on frame activation”和“Save files on framedeactivation”的选择
同时我们选择"Save files automatically", 并将其设置为30秒,这样IDEA依然可以自动保持文件,所以在每次切换时,你需要按下Ctrl+S保存文件

如何让IntelliJ IDEA动的时候不打开工程文件:Settings->General去掉Reopen last project on startup

3.用*标识编辑过的文件

Editor –> Editor Tabs
—————————————–
在IDEA中,你需要做以下设置, 这样被修改的文件会以*号标识出来,你可以及时保存相关的文件。
"Mark modifyied tabs with asterisk"

4.显示行号

如何显示行号:Settings->Editor->Appearance标签项,勾选Show line numbers

5.自定义键盘快捷方式

如果默认代码提示和补全快捷键跟输入法冲突,如何解决:Settings->Keymap

6.如何让光标不随意定位

Settings->Editor中去掉Allow placement of caret after end of line。

7.中文乱码问题

在包含中文文件名或者文件夹的时候会出现??的乱码,解决方法如下:

File菜单->Settings->Colors & Fonts->Editor Font=宋体, size=12, line spacing =1.0
File菜单->Settings->Appearance-> Font Name=Simsun,size=12

8.如何完美显示中文

Settings->Appearance中勾选Override default fonts by (not recommended),设置Name:NSimSun,Size:12

 

参考资料

Intellij idea性能优化
IntelliJ IDEA 目录技巧
IntelliJ IDEA 8性能优化
intellij idea 使用总结

分类: JAVA 标签:

使用固定大小的ThreadPool

2009年12月27日 admin 没有评论

java.util.concurrent包提供了很多并发的工具类,下面这段代码是一个简单的线程池的样例代码。

public class FixedThreadPoolDemo {
	public static void main(String[] args) {

		// int nThreads=Runtime.getRuntime().availableProcessors();
		ExecutorService executorService = Executors.newFixedThreadPool(2);

		Runnable saveLogTask = new Runnable() {

			@Override
			public void run() {
				try {
					Thread.currentThread().sleep(2000L);
				 System.out.println("Log is saved by thread"
						+ Thread.currentThread().getId());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

			}
		};
		Runnable feedBack = new Runnable() {

			@Override
			public void run() {
				try {
					Thread.currentThread().sleep(2000L);
				   System.out.println("Feedback is called by thread"
						+ Thread.currentThread().getId());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

			}
		};

		executorService.submit(saveLogTask);
		System.out.println("Do save log asynchronously.");
		executorService.submit(feedBack);
		System.out.println("Call feedback asynchronously.");

	}
}

其他相关

转载:使用Callable返回结果

分类: JAVA 标签: