Java
iteye_15896
这个作者很懒,什么都没留下…
展开
-
java 异常的运用之道
异常是一个很普通,但是很难把握和运用的工具。首先看看异常的种类:The basic philosophy of Java is that "badly formed code will not be run."基于很多原因,我们的程序中可能会发生一些错误,有可能是外界的输入错误导致的,有可能是程序内部编写错误导致的。好在现在的IDE比如Eclipse能帮我们进行一些关键字,程序格式以及类型...2011-09-18 21:03:46 · 78 阅读 · 0 评论 -
Java 执行过程详解 - JVM 生命周期
Java的执行过程也就是JVM从启动到退出的过程。JVM的运行是一个进程单元,可以用jps工具列举出正在运行的JVM 进程。在一个JVM进程中可以运行多个线程。[size=medium]1. JVM 启动[/size]当用java工具运行一个编译好的class文件的时候,比如下面的命令,我们就通过调用Test的main函数启动了一个JVM进程。并且传给main函数一个字符串数组{"rebo...2012-04-04 12:01:05 · 205 阅读 · 0 评论 -
Java Generic 学习
泛型是Java 5开始引入的一个语言级别的特性,目的是为了让你的程序更为可靠(reliable)。 程序总是有bug,而bug分为编译时bug和运行时bug,编译时bug是比较令人舒服的bug,因为大部分的IDE比如eclipse,就能让你在写代码的时候就能发现并及时fix。但是运行时bug就很难受了,必须在运行时的某个条件下才能出现,当你想去找它的时候还不一定那...2012-04-06 19:34:38 · 107 阅读 · 0 评论 -
Tomcat 7 源码分析 - 下载 tomcat source code 并导入eclipse
准备好好研究学习一下tomcat 7 的源代码,那么第一步就是下载,导入eclipse并且运行。[size=small]1. 下载源代码[/size]tomcat 7 的源代码在svn上,所以你需要svn的安装。创建一个目录tomcat7,并用命令行进入这个目录,之后用下面的命令下载[code="java"]svn co http://svn.apache.org/repos/as...2012-04-07 09:23:25 · 182 阅读 · 0 评论 -
Tomcat 7 源码分析 - 启动概览 bootstrap
先大致浏览一下整个启动过程吧。下面是org.apache.catalina.startup.Bootstrap的main函数。我在eclipse调用的是start的命令,也就是传入main的参数是start// 初始化, 构建org.apache.catalina.startup.Catalina实例,并赋值给catalinaDaemonbootstrap.init();// 把刚...原创 2012-04-07 14:57:14 · 134 阅读 · 0 评论 -
Tomcat 7 源码分析 - 初始化 class loader
Bootstrap 在启动的时候初始化了三种class loader:common,server和shared。在它的createClassLoader方法里面,通过:[code="java"]String value = CatalinaProperties.getProperty(name + ".loader");[/code]来得到属性文件catalina.properties里面...原创 2012-04-07 19:24:52 · 148 阅读 · 0 评论 -
Java Management Extensions (JMX) 学习笔记- 程序管理和监控
在学习Tomcat 7 的源代码的时候发现,大量运用到了JMX, MBeans,所以决定先学习一下。[size=medium]介绍[/size]JMX是Java 5开始引入的API。这个API意在帮助管理和监控资源: applications, devices, services, and the Java virtual machine. 你可以用JMX API来:[list][...2012-04-07 20:25:30 · 192 阅读 · 0 评论 -
Java String 详解 - String Literal
为了性能和内存资源上的考虑,JVM对String类型的数据做了特殊的处理。也就是大家都知道的String是immutable的或者是constant。其实很多面试或者笔试里面都会考到。有时觉得没事找事,确实,对于一般的系统,不需要考虑到底创建了几个string,只管用就是,似乎JVM会处理,至少会GC他们的。其实不然。对于大型项目,或者运行很长时间的项目,或者使用到大量字符串的项目来说,Strin...2012-04-08 14:23:00 · 2458 阅读 · 0 评论 -
JVisualVM还真是不错
最近再看Java 性能的问题。一直都习惯使用Jconsole和Jstack。今天偶然发现一个更好的东东JVisualVM。这个工具功能更强大而且有很多插件可以扩展,相信后面插件会越来越丰富。如此一来一些简单的profiling和monitoring需求都可以满足了,而不必使用JProfile和YourKit了。JVisualVM是JDK自带的一个使用工具。如果你的path里面包含java的...2012-04-27 21:38:35 · 150 阅读 · 0 评论 -
关于Hashtable和HashMap, Vector和ArrayList
在功能上讲Hashtable和HashMap, Vector和ArrayList有着几乎相同的功能。他们的主要区别在于:Hashtable和HashMap的区别,先看put方法的源代码Hashtable[code="java"]public synchronized V put(K key, V value) { // Make sure the value is not nu...2012-05-01 09:41:01 · 148 阅读 · 0 评论 -
Spring 事务在多线程环境下的传播
有时候需要使用多线程来提高对于CPU,尤其是多核CPU的利用率,来提高性能。Spring的bean一般都是无状态的,单例的。所以也就是线程安全的。那么对于声明式的事务,在多线程环境下又是怎么处理的呢?看看下面的例子:[code="java"]ClassA.java@Transactionalpublic void methodA(){ Execut...2012-05-04 21:42:16 · 2602 阅读 · 0 评论 -
从appfuse开始学习Spring和Hibernate - (1)构建项目
千里之行,始于足下。结合例子学习概念,比较靠谱。本文介绍如何开始从appfuse开始学习Spring和Hibernate。如果你还没有安装mysql,请先安装。同时也建议你安装一个workbench来方便管理数据库。1. 利用Maven构建appfuse项目万能的Maven提供了很多丰富的Archetype让你可以轻松构建一个包含了你想使用的框架的基本项目,而避免让你从零开始。你可...2012-05-05 15:54:37 · 341 阅读 · 0 评论 -
从appfuse开始学习Spring和Hibernate - (2)Spring启动log
分析appfuse的详细的启动日志来看看Spring的启动过程。1. 装载app上下文[code="java"]main INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started。。。。。。。。。。main INFO org....2012-05-05 21:35:16 · 227 阅读 · 0 评论 -
Java System 类详解 - properties and environment variables
在环境配置中我们经常需要知道或者设置系统属性值和环境变量。系统属性值是在同一个Java process里面有效的全局变量。而环境变量则是对于整个操作系统中所有进程都可见的,就如同你在OS里面设置的一样。因此除非必要,或者你确实需要环境变量,比如classpath和path,一般推荐使用properties。比如log4j的属性文件的使用。下面的代码可以打印出所有的系统变量和环境变量:[...2012-04-04 11:32:54 · 169 阅读 · 0 评论 -
Java System 类详解 - arraycopy
System类提供了数组copy函数: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int l...原创 2012-04-04 11:01:52 · 169 阅读 · 0 评论 -
Java System 类详解 - in, out, err
几乎所有的都用过这个System类吧,因为大家学习的第一个语句大概就是[code="java"]package jdk.lang;public class SystemInspection { public static void main(String[] args) throws Exception { System.out.println(“Hello Worl...2012-04-04 07:46:24 · 215 阅读 · 0 评论 -
ORM with Hibernate - 对象状态剖析
ORM其实有两个方面,一个是静态的mapping,也就是结构化的关系。一个对象与一张或者多张表怎么样对应。还有一个方面就是动态关系。在应用中创建,查询,修改一些对象的时候,这些变化如何同步到到DB里面去,反过来,DB的数据如果变了,怎么样反映到应用中的对象中来。换句话说,是内存中的对象是如何与DB里面的数据同步的。关于如何mapping,使用hibernate的人都应该懂得,只是另...原创 2011-02-22 17:50:18 · 106 阅读 · 0 评论 -
HIbernate 缓存机制
Cache主要是为了提高系统的性能的。HIbernate由于直接JDBC的一个方面就是因为它的缓冲机制。Hibernate有两级缓存。第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在persistence context中缓存的持久化对象。这级缓存可以保证对应于数据库同一行的对象只有一个实例。因此不存在并发的问题。第二级缓存是进程级别的缓存。这里缓存的对象为同一个sessi...2011-02-22 22:48:24 · 87 阅读 · 0 评论 -
不可变类(immutable class)
不可变类,顾名思义就是说类的实例是不可被修改的。实例的信息是在创建的时候提供,并且在整个生命周期中都不可改变。大家都知道Java的String类是immutable。其实primary的包装类都是immutable的。那么如果让你设计和immutable的class要怎么做呢?immutable 也就是不变的意思。不可改变的。怎么样让一个类的对象不变呢?第一你肯定想到,这个类不能被继承...2011-02-24 16:33:29 · 926 阅读 · 0 评论 -
Java中函数参数的传递
一般谈到函数的参数传递的时候都会想到值传递和引用传递。看看本文的例子就会很清楚了。[code="java"]public class MethodParameter { public static void main(String[] args) { String str = "Hello"; char[] c = new char[] { 'W', 'o', 'r',...2011-02-28 22:29:12 · 147 阅读 · 0 评论 -
学习 java.lang.System 类
java.lang.System类应该说是JDK提供的一个很好的工具类。这个类设计成final,就是不让你继承。不提供构造函数,就是说不让你实例化。它却给我们提供了很多有用的方法和属性。[size=medium][color=blue][b]System 类提供了标准输入(in),输出(out)和错误(err)流。[/b][/color][/size]什么是标准输入输出流?这是一个Un...2011-03-03 22:13:40 · 112 阅读 · 0 评论 -
Java IO 深入学习
IO可算是jdk的一个很基本的东西了,所以打算整理一下我对IO的学习和理解。IO,当然就是Input和Output的简写,分别代表了读和写两个方面。流的引入,使我们可以形象的认为数据就像流水一般在各种是被间流走,而不必理会沟渠是怎么铺设的。我们只要关注怎么控制这些字节或者字符的流动就好了。[size=medium][color=blue][b] InputStream & Outp...2011-03-05 20:19:37 · 144 阅读 · 0 评论 -
深入学习 Java concurrent - 多线程
我觉得要清理一下关于进程和线程的基本概念。[size=medium][color=blue][b]首先就是进程。[/b][/color][/size]什么是进程呢?简单的说就是cpu的一个执行过程,在这个过程中,os为它分配独立的内存空间,这样就保证不被别的进程影响。单任务的os就是说多个进程间只能顺序的执行,也就是说多个事情只能一件一件的做。那么多任务的os支持多个进程交叉同时执...原创 2011-03-09 21:32:48 · 137 阅读 · 0 评论 -
如何进行Java EE性能测试与调优
[b]性能测试的目标[/b]性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量。在进行真正的性能测试之前要先搞清楚目标:1. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好。具体需要达到的并发数是多大,要求的响应时间是多快,由产品经理来提出。2. 在确定的硬件条件下,测试得到最大并发数和相应的响应时间之后。如果增加硬件投入,可以得到怎样的性能提升回报...2012-03-24 20:51:27 · 92 阅读 · 0 评论 -
Java 并发编程 - Programming Concurrency on the JVM
这几个月一直在做性能调优的工作,以前总是进行功能的开发,从来不考虑性能的问题,经过这几个月的工作,发现从性能和扩展性的角度去看软件开发,还真是大不一样。在和朋友聊天的时候,提及Java程序是否能充分利用多核cpu的问题的时候,朋友给我推荐了这本书《Programming Concurrency on the JVM》。几天看下来,还真觉得很应景,建议做Java开发的朋友试着阅读一下。我简单记录下我...2012-03-24 23:08:33 · 176 阅读 · 0 评论 -
在Java中什么是 Primitive 和 Reference 类型
Java虽然是个面向对象的语言,也声称“Everything is object”- 一切都是对象。但是,我觉得还不够纯粹和彻底,和ruby或者python比较一下就知道了。在Java中,数字和布尔类型就不被看做对象,而是被称为primitive类型。不过也不见的就不好,本文也不是想对此评论和分析。本文是想阐述Java的数据类型。[b]Java的数据类型[/b]Java的数据类型分...2012-03-24 23:14:01 · 1210 阅读 · 0 评论 -
如何提高代码质量
本文是写给开发人员的建议,不会涉及很多QA方面的讨论。我觉得有三个方法可以提高软件质量,根据重要性和有效性一次为:Code Review, Refactor和Unit Test。这三个方法不是三个阶段,而是同时交叉进行的。[b]1. Code Review - 逻辑分析[/b] 当需要开发或者新增一些功能的时候,首先就是设计实现方案,然后开始编码实现。我觉得在开始...2012-04-02 20:08:58 · 129 阅读 · 0 评论 -
关于 sun.misc.Unsafe
今天在看java.util.concurrent.atomic包的源代码的时候看到原来这个包的底层都调用了sun.misc.Unsafe这个类,这个类其实是个native的实现类,他的神奇之处就在于它可以直接访问内存地址。如果你能直接调用它,那么就意味着你可以绕开一切lock而直接操作地址,虽然危险却有相当的性能吸引力。( 源代码) 它十分高效,因为它的实现基于CAS (Compare An...2012-04-03 15:31:59 · 123 阅读 · 0 评论 -
Spring 源码学习 - ClassPathXmlApplicationContext
众所周知,Spring以其强大而又灵活的IoC管理功能著称。IoC本质上是通过依赖注入DI的方式实现组件之间的解耦。其实在DI模式下,一个关键性的角色是装配器(assembler)。应用程序的组件A在引用别的组件B的时候不用通过new来创建,而是依赖一个第三方的装配器创建好B,然后再通过setter或者constructor来注入给A,这样A只管用B的接口,而不需要知道B的存在,从而实现了A与B的...2012-05-06 11:47:39 · 213 阅读 · 0 评论