Java
文章平均质量分 64
mango_song
专注大数据处理技术
展开
-
线上Spark处理Bzip2引出Hadoop Bzip2线程安全问题
我们的Hadoop生产环境有两个版本,其中一个是1.0.3,为了支持日志压缩和split,我们添加了hadoop-1.2中关于Bzip2压缩的feature. 一切运行良好。为了满足公司对迭代计算的需求(复杂HiveSQL,广告推荐算法,机器学习 etc), 我们构建了自己的Spark集群,最初是Standalone Mode,版本spark-0.9.1,支持Shark。上线后,问题接踵而原创 2015-01-14 10:17:02 · 1881 阅读 · 0 评论 -
JVM 调优总结(二) 一些概念
Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte转载 2013-08-16 12:21:57 · 685 阅读 · 1 评论 -
JVM调优总结(十) -调优方法
JVM调优工具Jconsole,jProfile,VisualVMJconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。转载 2013-08-17 21:45:44 · 948 阅读 · 1 评论 -
JVM调优总结(七) -典型配置举例1
以下配置主要针对分代垃圾回收算法而言。 堆大小设置年轻代的设置很关键JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设转载 2013-08-17 21:28:45 · 734 阅读 · 0 评论 -
JVM调优总结(一) 一些概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类转载 2013-08-16 12:19:41 · 808 阅读 · 1 评论 -
JVM调优总结(八) -典型配置举例2
常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。转载 2013-08-17 21:30:25 · 725 阅读 · 0 评论 -
JVM调优总结(六) 分代垃圾回收详述-2
分代垃圾回收流程示意 选择合适的垃圾收集算法串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC打开。 并行收集器转载 2013-08-16 12:37:37 · 745 阅读 · 0 评论 -
JVM调优总结(五) 分代垃圾回收详述-1
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程转载 2013-08-16 12:36:11 · 788 阅读 · 0 评论 -
JVM调优总结(四) 垃圾回收面临的问题
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进转载 2013-08-16 12:31:56 · 795 阅读 · 1 评论 -
JVM调优总结(三) 基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep): 此算法执行分两阶段。第一阶段从引用根节点开始标记所有转载 2013-08-16 12:30:11 · 808 阅读 · 1 评论 -
JVM GC调优
1、基本概念heap=young+old,不包括perm区young=eden + from_survivor + to_survivor,实际可用的大小是eden + to_survivor串行收集器-单cpu使用,相对高效并行收集器-多cpu,吞吐量优先时使用并发收集器-多cpu,停顿时间优先时使用(web应用一般用这个)2、基本JVM参数转载 2013-08-15 07:12:38 · 1333 阅读 · 1 评论 -
JVM调优总结(九) -新一代垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个转载 2013-08-17 21:32:15 · 712 阅读 · 0 评论 -
mvn常用命令
Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通java项目: mvn archetype:create -DgroupId=packageName -DartifactId=projectName 2. 创建Maven的Web项目: mvn原创 2013-08-30 17:46:34 · 1082 阅读 · 1 评论 -
Maven入门
呈顼I渝Maven的安装、配置及使用入门本书代码下载大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与我交流任何关于本书的问题和关于Maven的问题。咖啡与工具本书相当一部分的内容是在苏州十全街边的Solo咖啡馆完成的,老板Yin亲手烘焙咖啡豆、并能做出据说是苏转载 2013-10-09 12:06:37 · 2317 阅读 · 0 评论 -
我读过最好的Epoll模型讲解
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要转载 2015-01-12 16:26:40 · 26078 阅读 · 3 评论 -
多线程开发之Object.wait() notify() notifyall()
参考文献:object.wait()和object.notify()和object.notifyall()正文wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。wait();//方式1:this.wait();//方式原创 2015-01-07 10:40:09 · 842 阅读 · 0 评论 -
关于HashCode
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用, 首先,想要明白hashCode的作用,你必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。 前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否原创 2015-01-07 13:29:13 · 612 阅读 · 0 评论 -
Shutdown Hook
最近了解了一下Java中ShutdownHook的特性,网上有几篇讲述得很全面的文章,做些记录如下:1、ShutdownHook在某些情况下不会运行ShutdownHook从不不保证一定会运行。当JVM由于内部原因崩溃,或接收到操作系统发送的SIGKILL命令等,关闭钩子来不及运行JVM进程就已经退出。2、ShutdownHook可能在运行过程中被中止操作系统在关闭过程中,发送SI转载 2014-11-05 15:32:24 · 2234 阅读 · 0 评论 -
[Java] Java 动态代理
NIO API 主要集中在 java.nio 和它的 subpackages 中: java.nio定义了 Buffer 及其数据类型相关的子类。其中被 java.nio.channels 中的类用来进行 IO 操作的 ByteBuffer 的作用非常重要。 java.nio.channels定义了一系列处理 IO 的 Channel 接口以及这些接口在文件系统和网络通讯上转载 2013-01-31 23:32:12 · 1062 阅读 · 0 评论 -
[Java] Java ThreadLocal 学习
早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择。使用这个工具类可以很简洁地编写出优美的多线程程序,虽然ThreadLocal非常有用,但是似乎现在了解它、使用它的朋友还不多。 ThreadLocal是什么 ThreadLocal是什么呢?其实ThreadLocal并原创 2013-02-01 15:53:30 · 742 阅读 · 0 评论 -
Hadoop RPC详解-RMI
Hadoop RPC 远程过程调用是Hadoop中的核心概念。在深入研究RPC之前,先看看远程调用的鼻祖Java RMI.1.什么是RMIJava远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用原创 2014-03-20 21:51:45 · 2117 阅读 · 0 评论 -
Java Project报错:Access restriction is not accessible due to restriction on required library
编译hadoop时这几行报错:import com.sun.security.auth.NTUserPrincipal;import com.sun.security.auth.UnixPrincipal;import com.sun.security.auth.module.Krb5LoginModule;错误提示为:Access restriction: The typ原创 2013-08-13 19:09:00 · 1801 阅读 · 0 评论 -
6个Java项目UML反向工程工具
本文介绍6款开源的工具,可以将Java项目反向工程到UML的类图。1.Eclipse MDT模型开发工具(MDT)提供了一些示范性工具,在元模型的基础上的发展模式。它支持创建UML图,从代码的逆向工程到UML图等等。2.ArgoUMLArgoUML是一个领先的开源UML模型工具,它支持UML 1.4的所有标准,可以运行于任何Java平台上。3.ModelGoonMo转载 2014-03-21 10:36:48 · 1488 阅读 · 0 评论 -
JVM调优总结(十一) - JVM参数大全
Java 6 JVM参数选项大全(中文版)作者:Ken WuEmail: ken.wug@gmail.com转载本文档请注明原文链接 http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm! 本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Options 编写的译文。主要介绍JVM中转载 2013-08-17 21:52:57 · 1450 阅读 · 1 评论 -
JVM参数调优
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355转载 2013-08-12 10:09:07 · 570 阅读 · 0 评论 -
jstat 详解
jstat 1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 2.jstat -gccapacity pid转载 2013-08-11 09:26:08 · 985 阅读 · 0 评论 -
[Java] eclipse 导出jar包
从以下两篇文章整理所得http://blog.csdn.net/kanfeikanfei/article/details/4024304 和http://blog.csdn.net/guanmjie/article/details/4437779有时候需要将j2se工程导出,这样可以在别处运作,就不必拘泥于开发感觉中才能运行了。具体做法如下:方法一:(工程没有引用外部jar包时,直接导原创 2013-01-22 20:26:01 · 15362 阅读 · 0 评论 -
[Java] 使用htmlparser在爬虫时过滤网页
爬虫如何过滤网页内容? 这里需要用到htmlparser 1、 简介htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它提供了接口,支持线性和嵌套HTML文本。在实际的项目中只需要将htmlparser.jar导入classpath中,就可以使用HTMLParser提供的API了。2、主要应用HTMLPa转载 2012-12-18 14:49:44 · 1504 阅读 · 0 评论 -
[Java] Java中override陷阱(参考部分文章)
class Base{int a=10;public void show(){ System.out.println(a);}}class Ext extends Base{int a=200;public void show(String s){ System.out.println(s);}}public class MyMain{public st转载 2012-12-28 11:00:29 · 1150 阅读 · 0 评论 -
[Java] HTTP 404 no result defined for action
1.404 no result defined for action今天遇到一个诡异的错误.ssh框架搭的项目.struts.xml文件内容如下:http://struts.apache.org/dtds/struts-2.1.dtd"> > class="net.gicp.yuanpan1987.action.UploadAction">转载 2012-12-18 14:53:41 · 785 阅读 · 0 评论 -
使用HttpClient和HtmlParser实现网络爬虫
这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫(Crawler),来说明如何使用 HtmlParser 根据需要处理 Internet 上的网页,以及如何使用 HttpClient来简化 Get 和 Post 请求操作,构建强大的网络应用程序。使用 HttpClient 和 HtmlParser 实现简易爬虫这转载 2012-12-18 14:49:50 · 920 阅读 · 0 评论 -
浅谈HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 1.根转载 2012-12-18 14:49:53 · 384 阅读 · 0 评论 -
[Java] JAVA中文字符编码问题详解
JAVA的中文字符乱码问题一直很让人头疼。特别是在WEB应用中。网上的分析文章和解决方案都很多,但总是针对某些特定情况的。很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍。可当过段时间,换了个应用或换了个环境,又会碰到那讨厌的火 星文,并再次无所适从。于是下决心好好整理一下中文字符编码问题,以方便自己记忆,也为其他程序员兄弟们提供一份参转载 2013-01-10 15:48:49 · 1112 阅读 · 0 评论 -
[Java] eclipse版本趣谈
eclipse是我的主要开发工具,在闲暇之余,也让我们来侃侃和开发代号有关的有趣事情,先简述如下:eclipse,顾名思义,日蚀,是一种天文现象,而eclipse这个IDE各个版本的开发代号,都直接或间接的与天文有关系。除了Galileo,Indigo之外,eclipse的开发代号都与希腊神话中的人名有关系。Galileo虽然不是希腊神话中的人物,但是Galileo本人其实就是科学转载 2012-12-18 14:53:20 · 497 阅读 · 0 评论 -
[Java] Java泛型问题 关于警告:XXis a raw type
我们从一个简单的例子开始:假设我们现在需要一个专用来存储字符串的List,该如何实现?呵呵,这还不简单,且看如下代码: public static void main(String[] args){ List strList = new ArrayList(); strList.add("one"); strList.add("two")转载 2012-12-28 15:35:25 · 17085 阅读 · 0 评论 -
[Linux] Jps介绍以及解决jps无法查看某个已…
对于jps较熟悉可以直接查看第二部分的分析 1、jps的作用jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command。 2、某个java进程已经启动,用jps却显示不了该进程进程号这个问题已经碰到过两次了,所以在这里总结下。原创 2012-12-18 14:52:26 · 4630 阅读 · 0 评论 -
[Java] Java Zip文件压缩与解压缩
apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩http://ant.apache.org/。下载地址:org.apache.tools.zip下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。以下是ZipUtil类的代码,其实现了createZipFile 和 unZip两个功能package com.u原创 2013-01-11 14:19:38 · 1137 阅读 · 0 评论 -
[Java] Java synchronized详解
一、概述synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包括两种用法:synchronized 方法和 synchronized 块。1. synchronized 方法:原创 2013-02-02 03:14:35 · 515 阅读 · 0 评论 -
[Java] Java NIO 详解
关于JavaNIO的API,可以看我上篇博文有详细描述:http://blog.csdn.net/mango_song/article/details/8561427下面是大牛逸情公子中关于NIO的解读,结合小例子更容易理解NIO原理,原文地址http://weixiaolu.iteye.com/blog/1477774Java NIO原理图文分析及代码实现 前言:转载 2013-02-01 12:42:29 · 1734 阅读 · 2 评论 -
[Java] Java Socket编程范例
socket用中文意思就是我们常说的”套接字“,我们用它来解决基于TCP/IP协议的网络通信。Java有一套功能强大而又易于使用的网络开发API,这个API是一系列的接口和类,在java.net和javax.net包中可以找到它们。套接字一般分为两种:流套接字(StreamSocket)和数据报套接字(DatagramSockets)。关于套接字的编程可以写成一本书,本文不想在这里做深入探究(其实转载 2012-12-18 14:51:47 · 487 阅读 · 0 评论