November 25, 2010
| 作者:白菜
|
分类:JAVA
1 JVM简介
JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站、企业内部应用、实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError,明天是网站系统报了个OutOfMemoryError,这种错误又很难重现,只有分析Javacore和dump文件,运气好点还能分析出个结果,运行遭的点,就直接去庙里烧香吧!每天接客户的电话都是战战兢兢的,生怕再出什么幺蛾子了。我想Java做的久一点的都有这样的经历,那这些问题的最终根结是在哪呢?——JVM。
JVM全称是Java Virtual Machine,Java虚拟机,也就是在计算机上再虚拟一个计算机,这和我们使用VMWare不一样,那个虚拟的东西你是可以看到的,这个JVM你是看不到的,它存在内存中。我们知道计算机的基本构成是:运算器、控制器、存储器、输入和输出设备,那这个JVM也是有这成套的元素,运算器是当然是交给硬件CPU还处理了,只是为了适应“一次编译,随处运行”的情况,需要做一个翻译动作,于是就用了JVM自己的命令集,这与汇编的命令集有点类似,每一种汇编命令集针对一个系列的CPU,比如8086系列的汇编也是可以用在8088上的,但是就不能跑在8051上,而JVM的命令集则是可以到处运行的,因为JVM做了翻译,根据不同的CPU,翻译成不同的机器语言。
JVM中我们最需要深入理解的就是它的存储部分,存储?硬盘?NO,NO,JVM是一个内存中的虚拟机,那它的存储就是内存了,我们写的所有类、常量、变量、方法都在内存中,这决定着我们程序运行的是否健壮、是否高效,接下来的部分就是重点介绍之。
2 JVM的组成部分
我们先把JVM这个虚拟机画出来,如下图所示:

阅读剩余部分...
November 17, 2010
| 作者:白菜
|
分类:JAVA
关键字: log4j,apache,java
一、介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
二。配置
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。下面我们介绍使用properties格式做为配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
一般把这个文件放置在web-inf根目录下。
1. 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
阅读剩余部分...
之前我曾经撰文写过
eclipse3.6+tomcat 7的整合文章,也提到过jdk1.6.21在eclipse 3.6下存在冲突的问题,但说的不是很详细,有人问到,那我就再说一下吧。这是这个官方就有说明的,在下载页面很明显的标出了,只是有的同学不是在官方下载的或者太粗心没注意到。我们看官方是怎么说的。
The Eclipse 3.3 - 3.6 launchers for Windows had a problem with the Oracle/Sun Java VM version '1.6.0_21-b06'.
UPDATE: Oracle/Sun have released a respin of their JDK/JRE to fix this, so the recommended resolution of this problem is to download and re-install version 1.6.0_21-b07' or higher from http://www.java.com (alternative link is http://java.sun.com/javase/downloads/index.jsp). Make sure you have b07 or higher by running java -version.
Before the fix was released, there were three choices to work around this:
- switch back to '1.6.0_20' (as of July 19, 2010 it can still be downloaded here)
- Change the commandline for launching or add the following line after "-vmargs" to your Eclipse.ini file:
-XX:MaxPermSize=256m
(Detailed instructions/examples)
- For 32-bit Helios, download the fixed eclipse_1308.dll and place it into
(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
The Java bug was closed for voting and comments at 6969236 on the Java BugParade because the change has been reverted; the related Eclipse bug report is open for voting and comments at bug 319514.
已经说得很明白了,由于1.6.0_21-b06中部分包的名字被Oracle公司修改了,会造成原先的插件内存泄露,故官方也给出了三种解决方案。
(1)把JDK的版本降级到 jdk 1.6.0_20。下载地址:here
(2)修改Eclipse.ini文件里的设置,在-vmargs后添加或修改下面这句-XX:MaxPermSize=256m。
(3)对于32位版本的Eclipse3.6,可以下载这个补丁。eclipse_1308.dll,并且放置到(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503。
(4)升级jdk1.6.0_21-b06到1.6.0_21-b07或更高。
October 18, 2010
| 作者:白菜
|
分类:JAVA
本文系转载,文中内容未经测试。
需求描述:任何程序都会存在bug,虽然项目经过反复测试,已经上线运行了,但难免会遇到各种错误,在这里轻松配置log4j实现错误消息的email通知.
两个文件:web.xml log4j.properties
web.xml
在web.xml中添加如下代码
<!-- 设置上下文参数 -->
<context-param>
<!-- log4j配置文件位置 -->
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<!-- log4j监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4j.properties
阅读剩余部分...
October 17, 2010
| 作者:白菜
|
分类:JAVA
iBATIS是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。
其中SQL MAP的体系结构如下:

平时我们跟数据库交互,直接在java代码中编写sql语句,获取数据库链接,然后执行得到结果。
Jsp:
sql =“ select 2 from dual“ ;
rs = stmt.executeQuery(sql);
Java:
sql =“ select 2 from dual“ ;
Map tMap = (Map) SafeDBConn.get(sql);
我们的Sql语句是放在jsp或者java代码中,如果要修改的话需要重新进行编译。
ibatis实现了sql语句和代码的分离,把sql放在了xml配置文件中。
例如:
<!--根据手机号码查询教师信息 -->
<select id="selectTeacherByMobile" parameterClass="String" resultClass="Teacher">
select * from teacher where mobile=#mobile#
</select>
阅读剩余部分...
一款专业级Web开发工具NetBeans6.9.1,php,java开发利器.
首先,之所以标题不叫 PHP开发工具,是因为这是一个综合的开发工具,就像Eclipse、VS,所以,如果你只是纯粹的PHP开发人员,也许你会有更好的选择。
所以这贴不是讨论那个好那个坏的,仁者见仁,智者见智,各有所需,各有所好。
由于本人经过长时间的使用和赛选,觉得它是最出众的,不敢独享,所以拿出来分享。
言归正传,本人重点推荐的Web专业开发工具是:NetBeans
没错,你没看错,就是SUN公司推出的皇家Java开发工具,今年已经10年了,但是很少有人知道它能用来做PHP开发,因为NetBeans在2008年的9月份左右才开始支持PHP开发,也推出了相应的PHP版,安装文件>相当小,只有31M,当然并没有包含Java运行环境,这个需要独立安装。但是对于JAVA版的,可以下载捆绑了JRE的安装包。
NetBeans目前有JAVA,JAVAFX,J2EE,C++,PHP,RUBY,ALL一共7个安装包,最新版本为6.9.1。
介绍一下它的特性
阅读剩余部分...
September 19, 2010
| 作者:白菜
|
分类:软件&IDE
基于JAVA的IDE一个个都是吃内存的大户,运行的时间长了就会消耗掉不少的内存资源,不过Eclipse中已经提供了对其使用的内存资源进行查看和回收的方式。
JAVA存在的最大问题就是内存释放,虽说JAVA有自动垃圾回收机制,但很多时候并不管用,还是需要手工强制释放。基于JAVA的IDE都是如此。比如NETBEAN,同样需要手动释放。
只需要打开Windows--Perferences,选中Show heap status这个checkbox(如下图)。

配置完成以后在eclipse的状态栏中就会出现如下的内存信息条。点击【垃圾箱】图标就可以让Eclipse回收内存了:-)。