JAVA
文章平均质量分 74
lengyuhong
大学生,经历温州大学和浙江工业大学,现在淘宝数据平台实习,喜欢的领域:关联智能推荐,海量数据处理,搜索引擎
展开
-
Java加锁问题 java.util.ConcurrentModificationException 错误
<br />工作中碰到个ConcurrentModificationException。代码如下:<br />List list = ...;<br />for(Iterator iter = list.iterator(); iter.hasNext();) {<br /> Object obj = iter.next();<br /> ...<br /> if(***) {<br /> list.remove(obj);<br /> }<br />}<br />转载 2010-09-26 17:52:00 · 1122 阅读 · 0 评论 -
java虚拟机内存管理机制(一):JVM内存管理总结【分享】
近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JVM里面还是有不少以前不知道的细节,这里稍微剖析一下。先看一看JVM的内部结构——如图所示,JVM主要包括两个子系统和两个组件。两个子系统分别是Class loader子系统和Execution engine(执行引擎) 子系统;两个组件分别是Runtime data area (运行时数据区域)组件和Native interface(本地接口)组件。Class loader子系统的作用:根据给定的全限定名类名(如 java.l原创 2010-10-20 10:55:00 · 38266 阅读 · 2 评论 -
java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收
Java语言具备GC(垃圾回收)的能力,内存管理不需要应用程序去过问,这很方便。但是,GC是怎么进行的,JVM的内存参数应该怎么调整,如何优化,往往我们不是太清楚。看过一些资料后,对Sun JVM的内存管理以及垃圾回收的机制大概有了一个概念,这里将这些资料归纳和翻译出来。本文内容主要基于Sun JVM 1.3.1,在后续版本中有不少优化措施,但是这些基本概念还是不变的。这里假设大家对GC的概念和基本原理都已经了解,不详细叙述了。当JVM进行GC的时候,是要消耗CPU资源和需要一定时间的,这会影响到程序的正常转载 2010-10-20 11:07:00 · 7261 阅读 · 0 评论 -
ClassLoader
<br />/* * @(#)ClassLoader.java 1.189 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;import java.io.InputStream;import java.io.IOE原创 2010-10-20 15:05:00 · 2677 阅读 · 0 评论 -
java虚拟机内存管理机制(三):我主管写的一些jvm内存管理知识
补习了一下jvm的内存管理知识,有以下心得分享: 1、jvm的内存分区分级大粒度管理相较memcache的固定单元小粒度内存管理,拥有更高的内存利用率,但带来内存碎片的问题。 2、为了解决内存碎片问题,jvm采取了碎片整理的方式,但碎片整理是很耗时的。3、为了提高碎片整理的效率,因此引入了周期性的GC,而且分区分级的方式也控制了每次GC和碎片整理的范围。 4、由于jvm使用堆内存来存储局部变量,而局部变量具有生存周期短,先申请的后释放的特点,因此在低级别的分区中进行GC是效率最高的方式。 感觉环环相扣,有点原创 2010-10-19 19:07:00 · 5167 阅读 · 1 评论 -
System
<br />/* * @(#)System.java 1.159 07/11/27 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;import java.io.*;import java.util.Properties;imp原创 2010-10-20 14:58:00 · 1215 阅读 · 1 评论 -
Thread
/* * @(#)Thread.java 1.174 08/01/23 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;import java.security.AccessController;import java.securi原创 2010-10-20 15:03:00 · 3724 阅读 · 0 评论 -
JAVA基础
在这里记录一些在java基础基础知识。接口:原创 2010-12-12 17:03:00 · 1605 阅读 · 0 评论 -
Java中Queue类实现
<br /> <br />原先在java编程中,Queue的实现都是用LinkedList<br />Queue queue = new LinkedList(); <br />但正如jdk中所说的那样:<br />注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成<br />LinkeList显示源码:h原创 2010-10-27 15:28:00 · 25439 阅读 · 0 评论 -
JDK命令详解
(1)rmic功能说明: rmic 为远程对象生成 stub 和 skeleton。 语法: rmic [ options ] package-qualified-class-name(s) 补充说明: rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象)。在 rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类。 命令选项 -classpath[路径] 指定原创 2010-10-17 17:46:00 · 2218 阅读 · 0 评论 -
java多线程入门:wait、notify、notifyAll函数介绍
wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll()的功能.因为都个对像都有锁,锁是每个对像的基础,当然操作锁的方法也是最基础了. 先看java doc怎么说: wait导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,转载 2010-10-17 16:32:00 · 4657 阅读 · 2 评论 -
淘宝架构师:校园招聘面试杂谈
作者:淘宝 毕玄 近期参与了几个大学的校园招聘,总体下来感觉还行,由于校园招聘需要面的人很多,差不多面试流程都形成模式了,在面试的过程中,有不少学生问过我,到底面试的标准是什么,不过每个面试官的标准都是不同的,所以也就注定了面试是会有些不公平的,是否对面试官的胃口会起到很大的决定性因素,当然,最重要的还是实力,很多学生会认为面试不公平,但我觉得这也算是从学校进入社会的第一课吧,工作后学生们会发现更多不公平的事,对于学生而言,无论是应届毕业的本科、硕士,我的面试标准都差不多,考察的为Java基础、Java转载 2010-10-18 14:20:00 · 922 阅读 · 1 评论 -
Java虚拟机支持的最大内存限制
最近在开发Java的程序。本来我是一直很喜欢Java的内存管理的,不需要担心分配内存,只管分配,垃圾收集器自己会给你回收内存的。现在开发的程序数据量很大,为了速度快,我准备把所有的信息加载进内存,这样可以保证快速响应。我还在反复算内存,想想自己的数据量,现在刚开始的时候应该够了(我的机器是4G内存,虽然Windows就认3.5G,但是比起我现在的数据量应该没问题)。 没想到第一个实验的程序,跑了几个小时,就遇到了Out of Memory Exception了。看看自己的虚拟机设置,我设置的是-Xms转载 2010-11-30 10:55:00 · 10761 阅读 · 1 评论 -
Java进阶学习:jar打包详解(二) 用MyEclipse自动生成
<br />前些天在网上看了些如何将java 项目转换成jar包. 都是说什么用jar命令对java工程进行打包<br />我看了哈子,觉的有点复杂.其实,用MyEclipse 打成JAR包,简单.快速<br />具体操作如下:<br />1.点项目反键->Export 如图:<br /><br />选择jar file 下一步<br /><br />下一步<br /><br />请对main class选择 你要运行的类<br />点完成,就这么简单转载 2010-10-09 16:10:00 · 911 阅读 · 0 评论 -
Java虚拟机(JVM)中的内存设置详解
<br />在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。<br /> <br /> PermGen space:全称是PermanentGenerationspace.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heapspace:存放Instance。<br /> GC(GarbageCollection)应该不会对PermGenspace进行清理,所以如果你的AP转载 2010-11-30 11:16:00 · 1970 阅读 · 0 评论 -
Java进阶学习:jar打包详解
jar文件听说过吗,没有?或者陌生!好,没关系,这就是我们的第一站:打包发布。为什么会有这个玩意呢,首先,这是jar的全称:JavaTM Archive (JAR) file,是的,就是java存档文件。这有点类似zip文件,想一想它是干什么的用的呢,压缩!?没错就是要压缩,将我们原先零散的东西放到一下,重新组织,所有这些目的只有一个:方便!好了,不用管他是怎么压缩的,我们的重点是哪些是我们要压缩的(输入),还有压缩成了什么(输出),进而将它发布(部署)。 那我们的输入(要压缩的东西)主要是class文转载 2010-10-09 15:01:00 · 845 阅读 · 0 评论 -
Java中怎样判断一个字符串是否是数字
1.使用Character.isDigit(char)判断String str = "123abc";if (!"".equals(str)) { char num[] = str.toCharArray();//把字符串转换为字符数组 StringBuffer title = new StringBuffer();//使用StringBuffer类,把非数字放到title中 StringBuffer hire = new StringBuffer();//把数字放到hire中 for (i转载 2010-10-13 14:57:00 · 50127 阅读 · 0 评论 -
java关键词大全
最近现开始学系JAVA一直都很头疼,不知道怎么学,看的书比较杂,好累。大家有什么好的建议给小弟推荐推荐。 最近看到了一篇讲JAVA关键字的,感觉很不错,所以拿来和大家分享。我是新手感觉很好的,高手们就路过吧。1.abstractabstract 关键字可以修改类或方法。abstract 类可以扩展(增加子类),但不能直接实例化。abstract 方法不在声明它的类中实现,但必须在某个子类中重写。-示例-public abstract class MyClass{}public abstract Strin转载 2010-10-15 09:12:00 · 2623 阅读 · 0 评论 -
Java内存机制详解
<br /><br />Java 堆(每个 Java 对象在其中分配)是您在编写 Java 应用程序时使用最频繁的内存区域。JVM 设计用于将我们与主机的特性隔离,所以将内存当作堆来考虑再正常不过了。您一定遇到过 Java 堆 OutOfMemoryError , 它可能是由于对象泄漏造成的,也可能是因为堆的大小不足以存储所有数据,您也可能了解这些场景的一些调试技巧。但是随着您的 Java 应用程序处理越来越多的数据和越来越多的并发负载,您可能就会遇到无法使用常规技巧进行修复的 OutOfMemoryErr转载 2010-12-05 19:42:00 · 1928 阅读 · 0 评论 -
String类
/* * @(#)String.java 1.204 06/06/09 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;import java.io.ObjectStreamClass;import java.io.ObjectSt原创 2010-10-17 15:28:00 · 1784 阅读 · 1 评论 -
Sun JDK类库学习(一) 学习资料
<br />学习资料:<br /><br />《分布式Java应用:基础与实践》作者:林昊(淘宝花名毕玄)<br /> <br />这里所要讲述的Sun JDK类库学习是《第四章 分布式java应用于Sun JDK类库》作者比较提纲挈领地讲解了相关内容,非常不错。<br /> <br /> <br />大纲如下:<br /><br />原创 2010-10-28 17:06:00 · 953 阅读 · 0 评论 -
Sun JDK类库学习(三) 集合类中的Set
1.HashSetHashMap的源代码:HashSet是Set接口的实现,Set和List最明显的区别在于Set不允许元素重复,而List允许。Set为了做到不允许元素重复,采用的是基于HashMap来实现注意点:* HashSet基于HashMap实现,无容量限制* HashSet是非线程安全原创 2010-10-29 10:54:00 · 947 阅读 · 0 评论 -
Lucene学习总结之三:综述Lucene的索引文件格式
原文:http://www.lucene.com.cn/about.htm#_Toc43005322在Lucene的web站点上,有关于Lucene的文件格式的规范,其规定了Lucene的文件格式采取的存储单位、组织结构、命名规范等等内容,但是它仅仅是一个规范说明,并没有从实现者角度来衡量这个规范的实现。因此,我们以下的内容,结合了我们自己的分析与文件格式的定义规范,以期望给出一个更加清晰的文件格式说明。具体的文档规范可以参考后面的文献2。 首先在Lucene的文件格式中,以字节为基础,定义了如下的数转载 2011-03-06 20:20:00 · 3316 阅读 · 0 评论 -
linux下用rpm 安装jdk
1.下载jdk的rpm安装包,这里以jdk-6u21-linux-i586-rpm.bin为例进行说明下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html2. 将jdk-6u21-linux-i586-rpm.bin 移动到合适的安装目录上,安装软件不要在/home路径下,这样很容易涉及到原创 2011-02-18 20:47:00 · 38408 阅读 · 3 评论 -
快速排序(一) 原理介绍
一、基本思想 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到原创 2011-03-10 21:25:00 · 9736 阅读 · 2 评论 -
运用Jconsole监控JVM
Jconsole是JDK自带的监控工具。它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界面。而且本身占用的服务器内存很小,甚至可以说几乎不消耗,不失为一款好工具。 Jconsole的使用方法,稍微复杂一些。 首先,来看看如何使用Jconsole 连接到远程linux服务器。 1. 在本地安装JDK 6.0版本。 2. 需要在远程服务器的jboss配置文件中,添加远程服务端口,并启转载 2011-02-22 16:26:00 · 25412 阅读 · 1 评论 -
Java中try catch finally的注意点
<br /> 在java中,try ...catch...finally 这个知识点说简单也简单,毕竟只是一个固定结构;说难也难,因为它会出现我们意想之外的结果,这里我摘录些可能出现问题的情况:<br />情况一:<br />public class TestTryReturn { public static void main(String[] args){ TestTryReturn ttr = new TestTryReturn(); System.ou原创 2011-03-13 20:25:00 · 6387 阅读 · 0 评论 -
简述一个大型交易网站的发展旅程
一、功能定义: –商品:展示商品,商品管理,……–交易:创建交易,交易管理,……–用户:注册用户,信息查询,用户管理,…… 二、技术发展第一版: 出于快速开发的考虑,第一版往往采用单台机器构建(这里采用java技术,下同),这样开发方便而且快速,采用的技术甚至可以是最简单的jsp,servlet等。 它的技术特点: •三个功能模块 •一个数据库中的三个表 •连接数据库使用了JDBC •模块之间的调用是JVM内部的方法调用第二版:原创 2011-03-25 20:35:00 · 3685 阅读 · 0 评论 -
Jboss调优——最佳线程数
在设置jboss的参数中,maxThreads(最大线程数)和acceptCount(最大等待线程数)是两个非常重要的指标,直接影响到程序的QPS。本文讲解jboss连接的运行原理,以及如何设置这两个参数。原创 2011-04-12 21:40:00 · 24649 阅读 · 2 评论 -
在myeclipse中如何拷贝一个web工程
<br /> <br />在MyEclipse中,经常练习的时候需要建立多个工程,但是为了方便,通常的作法是:复制一个工程,然后直接粘贴,但是,部署以后会发现,使用新的工程名访问不了,报404错误。 <br /><br />其原因是没有修改Web Context-root <br /><br />修改方法为: <br /> 选中项目,点右键-->Properties-->MyEclipse-->Web-->Context Root <br />修改Web Context-root的值为新的工程名。 <转载 2011-04-14 16:45:00 · 7260 阅读 · 0 评论 -
Lucene学习总结之五:细述Lucene的索引文件格式(2)
四、具体格式上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。4.1. 正向信息Index –> Segments (segments.gen, segments_N) –> Field(fnm, fdx, fdt) –> Term (tvx, tvd, tvf)上面的层次结构不是十分的准确,因为segments.gen和seg转载 2011-03-06 16:06:00 · 3444 阅读 · 0 评论 -
Lucene学习总结之二:Lucene的总体架构
原文出处:http://forfuture1978.javaeye.com/blog/546808Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。在Lucene in action中,Lucene 的构架和过程如下图,说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。让我们更细一些看Lucene的各组件: 被索引的转载 2011-03-02 16:52:00 · 3739 阅读 · 0 评论 -
Lucene学习总结之一:全文检索的基本原理
原文:http://forfuture1978.javaeye.com/blog/546771一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:指不定长或无固定转载 2011-03-02 16:21:00 · 7306 阅读 · 0 评论 -
Vector
/* * @(#)Vector.java 1.106 06/06/16 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;/** * The {@code Vector} class implements a growable arr原创 2010-10-29 10:06:00 · 1224 阅读 · 0 评论 -
Sun JDK类库学习(四) 集合类中的Map
HashMapHashMap的源代码:JDK中的关于HashMap的概述:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的原创 2010-11-01 10:53:00 · 791 阅读 · 0 评论 -
Sun JDK类库学习(二) 集合类中的List
集合包是java中最常用的包,它通常用的有Collection和Map两个接口的实现类,Collection用于存放多个单个对象,Map用于存放Key-Value形式的键值对。 Collection中常用的又分为两种类型的的接口:List和Set,两者最明显的差别为List支持放入重复的对象,而Set不支持。List常用的实现类有:ArrayList、LinkedList、Vector及Stack;Set接口常用的实现类有:HashSet、TreeSet。1. ArrayListArr原创 2010-10-28 17:40:00 · 1279 阅读 · 0 评论 -
正则表达式30分钟入门教程
<br />正则表达式30分钟入门教程<br />版本:v2.31 (2009-4-11) 作者:deerchao 转载请注明来源目录<br />跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者最后,来点广告……网上的资源及本文参考文献更新纪录本文目标<br />广告:做外包项目,挣美元!网站开发,手机开发等...<br />30分钟内让你明白正则表转载 2010-10-29 16:29:00 · 597 阅读 · 0 评论 -
Sun JDK类库学习(五) 序列化/反序列化
<br /> 对于Java的网络通信而言,将对象转化为流然后进行网络传输时最基本也是最常用的方法,而要把对象转化为流及将流还原成对象,最常用的方法就是java自带的序列化。<br /> 一. 将java对象转化为字节流常用的方法:<br /> <br /> public static byte[] toSerialization(Object object){ ByteArrayOutputStream output = new ByteArrayOutputStream();原创 2010-11-02 11:24:00 · 2532 阅读 · 0 评论 -
慢慢琢磨JVM
1 JVM简介JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站、企业内部应用、实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError,明天是网站系统报了个OutOfMemoryError,这种错误又很难重现,只有分析Javacore和d转载 2010-11-25 15:24:00 · 987 阅读 · 0 评论 -
MyEclipse
设置MyEclipse的字符集原创 2011-02-04 15:31:00 · 1442 阅读 · 0 评论