存档
jdk 命令之jmap
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 Concurrency 系列的文章
- Introduction to Java Concurrency
- Benefits
- Costs
- Creating and Starting Threads
- Race Conditions and Critical Sections
- Thread Safety and Shared Resources
- Thread Safety and Immutability
- Synchronized Blocks
- Thread Signaling
- Deadlock
- Deadlock Prevention
- Starvation and Fairness
- Nested Monitor Lockout
- Slipped Conditions
- Locks
- Read / Write Locks
- Reentrance Lockout
- Semaphores
- Blocking Queues
- Thread Pools
- Anatomy of a Synchronizer
转载:JBOSS连接池系列
- JBOSS连接池调优6-调优可能带来的好处
- JBOSS连接池调优5-合理的设置fetchsize
- JBOSS连接池调优4-合理设置min值和max值
- JBOSS连接池调优3-inlist查询优化
- JBOSS连接池调优2-合理的设置PSCACHE
- JBOSS连接池调优1-如何防止连接风暴
- JBOSS连接池附录-连接池默认参数及获取连接池中相关的统计信息
- JBOSS连接池4-连接的获取及返还和异常连接销毁
- JBOSS连接池3-连接池的初始化及关闭
- JBOSS连接池2-连接池的启动及prefill参数
- JBOSS连接池1-PreparedStatementCache参数的作用及原理
- 一个生产库的JBOSS连接池调整优化及分析
jdk 命令之jstat
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 Programming —Reference
如果想继续持有某个对象的引用,希望以后能够访问到该对象,但是也希望能够垃圾回收器释放它,这时就应该使用Reference对象。这样,你可以继续使用该对象,而在内存消耗殆尽的时候又允许释放该对象。以Reference对象作为你和普通引用之间的媒介,同时一定不能有普通的引用之星啊那个对象,这样就能达到上述目的。如果垃圾回收器发现某个对象是通过普通引用可获得的,该对象就不会被释放。
| 引用类型 | 特征 |
| 软引用(Soft Reference) | 主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证Java在抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常. |
| 弱引用(Week Reference) | 弱引用和软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收线程扫描它所管辖的内存区域的过程中,一旦发现只具有弱引用的对象,不管当前内存空间是否足够与否,都会回收它的内存。不过垃圾回收器是一个优先级很低的线程,因此不一定很快发现那些只具有弱引用的对象 |
| 虚引用(PhantomReference) | 虚引用顾名思义就是形同虚设,与其他几种引用都不同,虚引用并不决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样。在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。 |
WeakHashMap允许垃圾回收器自动清理“键”和“值”,所以它显得十分便利。对于向WeakHashMap添加“键”和“值”的操作,则没有什么特殊的要求。映射会自动使用WeakReference包装它们。允许清理元素的触发条件是,不再需要此“键”了。
jdk 命令之jar
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
在Eclipse中用TODO标签管理任务
很早以前写在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)
在任务窗口中刚才定义的2个任务就会显示出来了。
任务完成以后,可以通过点击编辑窗口的左边的【任务提示标记】将相应的任务标签删除,任务窗口中任务也会一并删除。
Eclipse除了默认提供了3种任务标签(FIXME,TODO,XXX),参考下图,还可以支持自定义任务标签。
进入Windows->Perferences->Java->Compile->Task Tags,我们就可以自定义任务标签,Eclipse中可以支持HIgh,Normal,Low三种级别的任务。
IntelliJ IDEA 使用总结
一直来使用的都是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 使用总结
使用固定大小的ThreadPool
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."); } }
