java基础
小狼_百度
百度,web系统,分布式系统,大数据,机器学习,人工智能等爱好者
展开
-
jstat命令详解
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于Java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。jstat工具特别强大,有转载 2017-06-21 13:03:17 · 474 阅读 · 0 评论 -
处理大型Excel文件的Java类库: X4J Analytic
x4j-analytic是一个用于Java编程语言的开源XLSX格式模板引擎API。X4J可嵌入在Java应用程序库,作为实现完全成熟的报表解决方案。X4J拥有很高的性能,能够使用恒定内存在数秒内产生一百万行的Excel报表。X4J主输入/输出格式是XLSX,Excel是作为设计编辑模板。也可以导出其他格式的报表:PDF,HTML,XML,CSV。package x4j.sampl转载 2016-07-08 09:56:57 · 1761 阅读 · 0 评论 -
POI使用SAX处理大量数据的xlsx格式的Excel文件
POI在处理Excel方面确实比较方便,但是当Excel数据量比较大的时候,使用POI处理就会导致java.lang.OutOfMemoryError: Java heap space的错误,当有大量数据写入xlsx文件时,POI为我们提供了SXSSFWorkBook类来处理,这个类的处理机制是当内存中的数据条数达到一个极限数量的时候就flush这部分数据,再依次处理余下的数据,这个在大多数场景能转载 2016-07-08 09:55:40 · 2062 阅读 · 0 评论 -
Spark Streaming 订单关联案例剖析
Apache Spark 是加州大学伯克利分校的 AMPLabs 开发的开源分布式轻量级通用计算框架。由于 Spark 基于内存设计,使得它拥有比 Hadoop 更高的性能(极端情况下可以达到 100x),并且对多语言(Scala、Java、Python)提供支持。其一栈式设计特点使得我们的学习和维护成本大大地减少,而且其提供了很好的容错解决方案。本文将详细地介绍如何使用 Spark St转载 2016-07-28 17:21:42 · 412 阅读 · 0 评论 -
JVM实用参数(八)GC日志
原文地址:https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/作者:PATRICK PESCHLOW,译者:Greenster 校对:梁海舰本系列的最后一部分是有关垃圾收集(GC)日志的JVM参数。GC日志是一个很重要的工具,它准确记录了每一次的GC的执行时间和执行结果,通过分析GC日志转载 2016-07-28 16:04:31 · 276 阅读 · 0 评论 -
JVM实用参数(七)CMS收集器
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。该目标对于大多数交互式应用很重要,比如web应用。在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器的操作和使用它时可能出现的主要挑战。就像吞吐量收集器(参见本系列的第6部分),CMS收集器处理老年代的对象,然而其操作要复杂得多。吞吐量收集器总是暂停应用程序线程,并且可能是相当长的一段时间,转载 2016-07-28 15:43:28 · 341 阅读 · 0 评论 -
JVM实用参数(六) 吞吐量收集器
在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准:吞吐量越高算法越好暂停时间越短算法越好首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。 JVM在专门的线程(GC threads)中执行GC。 只要GC线程是活动的,它们将与应用程序线程(application threads)争转载 2016-07-28 15:24:48 · 631 阅读 · 0 评论 -
JVM实用参数(四)内存调优
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分转载 2016-07-27 16:54:57 · 1148 阅读 · 0 评论 -
JVM 实用参数-5 新生代垃圾回收
本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation)。首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数。单纯从JVM的功能考虑,并不需要新生代,完全可以针对整个堆进行操作。新生代存在的唯一理由是优化垃圾回收(GC)的性能。更具体说,把堆划分为新生代和老年代有2个好处:简化了新对象的分配(只在新生代分配内转载 2016-07-26 15:43:37 · 1190 阅读 · 0 评论 -
用jstack诊断java应用故障
公司的生产系统大多是java应用,特别是java消费者,前段时间频繁出现故障。消息队列会突然堵塞,查看消费者日志,发现处理延时明显延长,而此时网络无丢包。最后多方排查,是java消费者运行出现死锁。这种问题可以通过jstack来dump获取java stack和native stack信息查明问题。如:jstack [-l] pid提供一个测试的例子:/**转载 2016-07-26 14:37:34 · 627 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。转载 2016-07-26 14:01:49 · 669 阅读 · 0 评论 -
Young GC日志分析
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-转载 2016-07-26 12:14:02 · 2666 阅读 · 0 评论 -
缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到转载 2016-03-22 17:59:04 · 623 阅读 · 0 评论 -
JVM内存管理
为了保证java内存不会溢出,java中有垃圾回收机制。垃圾回收机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。 内存溢出就是你要求分配的java虚拟机内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 内存泄漏是指你向系统转载 2014-07-31 11:14:48 · 765 阅读 · 0 评论 -
数据库连接池为什么要建立多个连接
一般程序在访问数据库的时候,都是使用数据库连接池,比如:DBCP,C3P0等等。至于为什么使用连接池,大家都知道,就是为了避免频繁的与数据库建立连接,因为建立连接是一个比较耗时的操作。而连接池的配置基本差不多,都会设置一个最大连接数。现在就有一个疑问,为什么最大连接数要设置成多个?只建立1个连接,一直都不关闭可以吗?1个的话岂不是占用系统资源更少吗(排除掉使用transaction的情况,转载 2013-10-22 18:52:17 · 8494 阅读 · 2 评论 -
Java命令行运行参数说明大全
Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME"bin"java –option 来启动,-option为虚拟机参数,JAVA_HOME为JDK安装路径,通过这些参数可对虚拟机的运行状态进行调整,掌握参数的含义可对虚拟机的运行模式有更深入理解。一、 查看参数列表:虚拟机参数分为基本和扩展两类,在命令行中输转载 2013-10-24 14:54:51 · 1622 阅读 · 0 评论 -
java 正则表达式
先看看一些匹配规则 一、正则表达式基础知识 我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说: 正则表达式 规则" bor转载 2013-05-27 19:26:13 · 731 阅读 · 0 评论 -
JVM 调优 —— GC 长时间停顿问题及解决方法
零. 简介垃圾收集器长时间停顿,表现在 Web 页面上可能是页面响应码 500 之类的服务器错误问题,如果是个支付过程可能会导致支付失败,将造成公司的直接经济损失,程序员要尽量避免或者说减少此类情况发生。一. 并发模式失败(concurrent mode failure)并发模式失败日志: 2016-02-21T13:53:0转载 2016-07-29 13:29:50 · 21713 阅读 · 1 评论 -
java.lang.instrument 学习(一)
转自:http://jiangbo.me/blog/2012/02/21/java-lang-instrument/Instrumentation介绍:java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。 Java SE5中使用JVM转载 2016-08-05 17:25:45 · 362 阅读 · 0 评论 -
深入研究Java类加载机制
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。 一、简单过程 Java程序运行的场所是内存,当在命令行下执行:java HelloWorld命令的时候,JVM会将HelloWorld.class加载到内存中,并转载 2016-08-05 17:28:51 · 390 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足转载 2017-06-21 12:58:20 · 340 阅读 · 0 评论 -
JVM GC调优一则--增大Eden Space提高性能
目录(?)[+]缘起线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。先把应用的heap dump下来分析下:jmap -dump:forma转载 2017-06-21 12:56:58 · 868 阅读 · 1 评论 -
分布式事务(一)两阶段提交及JTA
分布式事务与本地事务一样,包含原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。两阶段提交是保证分布式事务中原子性的重要方法。本文重点介绍了两阶段提交的原理,PostgreSQL中两阶段提交接口,以及Java中两阶段提交接口规范JTA的使用方式。原创文章,转载请务必将下面这段话置于文章开头处(保留超链接)。转载 2017-06-06 15:33:57 · 520 阅读 · 0 评论 -
Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
Java I/O模型同步 vs. 异步同步I/O 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行。异步I/O 多个请求可以并发地执行,一个请求或者任务的执行不会导致整个流程的暂时等待。用户线程发起I/O请求后仍然继续执行,当内核I/O操作完成后会通知用户线程,转载 2017-06-06 15:28:51 · 396 阅读 · 0 评论 -
Java进阶(四)线程间通信剖析
CountDownLatchCountDownLatch适用场景Java多线程编程中经常会碰到这样一种场景——某个线程需要等待一个或多个线程操作结束(或达到某种状态)才开始执行。比如开发一个并发测试工具时,主线程需要等到所有测试线程均执行完成再开始统计总共耗费的时间,此时可以通过CountDownLatch轻松实现。CountDownLatch实例123转载 2017-06-06 15:20:48 · 309 阅读 · 1 评论 -
Java进阶(三)多线程开发关键技术
本文将介绍Java多线程开发必不可少的锁和同步机制,同时介绍sleep和wait等常用的暂停线程执行的方法,并详述synchronized的几种使用方式,以及Java中的重入锁(ReentrantLock)和读写锁(ReadWriteLock),之后结合实例分析了重入锁条件变量(Condition)的使用技巧,最后介绍了信号量(Semaphore)的适用场景和使用技巧。原创文章,转转载 2017-06-06 15:14:56 · 617 阅读 · 0 评论 -
Java进阶(二)当我们说线程安全时,到底在说什么
提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定程序上保证顺序性,同时例讲synchronized如何同时保证可见性和原子性,最后对比volatile和synchronized的适用场景。原创文章,转载请务必将下面这转载 2017-06-06 15:08:27 · 389 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get转载 2017-06-05 19:10:31 · 414 阅读 · 0 评论 -
Java集合---ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2017-06-05 19:09:39 · 265 阅读 · 0 评论 -
把第三方的jar包一起打成一个jar包方法
插件介绍: 这个插件可以帮助你将自己的程序连同第三方的JAR包一起打成一整个的jar包,这样 别人在调用你打成的jar包的时候,就不用再单独下载第三方jar文件了。详细介绍可以百度下。 下载地址: http://cdnetworks-kr-1.dl.sourceforge.net/project/fjep/fatjar/fatjar_0转载 2017-03-31 16:42:54 · 2253 阅读 · 0 评论 -
从头到尾彻底解析Hash表算法
作者:July、wuliming、pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。 第一部分:Top K 算法详解 问题描述(百度面试题): 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255转载 2016-08-12 17:42:19 · 800 阅读 · 0 评论 -
为什么一般hashtable的桶数会取一个素数
先看下面一段网上摘录的:设有一个哈希函数H( c ) = c % N;当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候H( 11100(二进制) ) = H( 28 ) = 4H( 10100(二进制) ) = H( 20 )= 4这时候c的二进制第4位(从右向左数)就”失效”了,也就是说,无论第c的4位取什么值,都会导致H( c转载 2016-08-24 19:26:59 · 977 阅读 · 0 评论 -
位操作基础篇之位操作全面总结
Title: 位操作基础篇之位操作全面总结Author: MoreWindowsE-mail: morewindows@126.comKeyWord: C/C++ 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大转载 2016-08-24 19:21:58 · 549 阅读 · 0 评论 -
JAVA HashMap详细介绍和示例
第1部分 HashMap介绍HashMap简介HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有转载 2016-08-05 18:54:04 · 656 阅读 · 0 评论 -
java中HashMap详解
HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。 通过 HashMap转载 2016-08-05 18:51:57 · 342 阅读 · 0 评论 -
从另一个角度看大数据量处理利器:布隆过滤器
思路:从简单的排序谈到BitMap算法,再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器。情景1:对无重复的数据进行排序@给定数据(2,4,1,12,9,7,6)如何对它排序? 方法1:基本的排序方法包括冒泡,快排等。 方法2:使用BitMap算法 方法1就不介绍了,方法2中所谓的BitMap是一个位数组,跟平时使用的数组的唯一差转载 2016-08-05 18:48:16 · 1362 阅读 · 0 评论 -
WeakHashMap和HashMap的区别
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于a对转载 2012-11-23 17:54:26 · 1483 阅读 · 1 评论 -
JAVA 对象池
Jakarta对象池 ☆为什么使用对象池 恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。Jakarta Commons Pool组件提供了一整套用于实现对象池化的框架,以及若干种各具特色的对象池实现 ☆对象池思路 对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复转载 2012-11-26 17:05:23 · 1168 阅读 · 0 评论 -
花1K内存实现高效I/O的RandomAccessFile类
主体:目前最流行的J2SDK版本是1.3系列。使用该版本的开发人员需文件随机存取,就得使用RandomAccessFile类。其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效率。开发人员迫切需要提高效率,下面分析RandomAccessFile等文件类的源代码,找出其中的症结所在,并加以改进优化,创建一个"性/价比"俱佳的随机文件访问类BufferedRan转载 2012-10-15 15:46:29 · 1420 阅读 · 0 评论 -
JVM 调优 技巧 总结
写了好几篇关于这个方向的文章了,但连自己都感觉写的有点乱,没有总结。所以现在把所有方法整理到一起,如果以后又发现新的,我继续补充到这篇文章里。 这篇是技巧性的文章,如果要找关于GC或者调整内纯的文章,看我其他几篇文章。因为是JVM 调优总结,所以废话少说。从各方面一共收集到以下几个方法: 1.升级 JVM 版本。如果能使用64-bit,使用64-bit JVM。转载 2008-11-27 15:29:00 · 741 阅读 · 2 评论