java基础
文章平均质量分 54
iteye_10680
这个作者很懒,什么都没留下…
展开
-
由不断的创建线程产生的内存错误所想到的
public class MultiThreadOOM { public static class SleepThread implements Runnable public void run(){ try { Thread.sleep(10000000); } catch (InterruptedExce...原创 2015-05-06 13:20:16 · 181 阅读 · 0 评论 -
【转】什么是Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线...原创 2014-11-19 12:03:50 · 75 阅读 · 0 评论 -
【经验总结】NIO常见的陷阱解析
NIO编程很容易吗?不容易吗?很容易吗?不容易吗?……有些陷阱你需要知道 陷阱1:处理事件忘记移除key在select返回值大于0的情况下,循环处理Selector.selectedKeys 集合,每处理一个必须移除Iterator<SelectionKey> it=set.iterator();While(it.hasNext()){ S...原创 2014-11-19 11:24:59 · 382 阅读 · 0 评论 -
开发者必备的 Chrome 扩展
Firebug:不用多介绍了吧https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifenchChromeSnifferPlus:Chrome 探测器,可以探测正在使用的开源软件或者 js 类库https://chrome.google.com/webstore/detail/chrome-sniffer-plus...原创 2014-11-06 12:20:48 · 81 阅读 · 0 评论 -
32位jvm还是64位jvm?
在早期,JVM只有32位的,众所周知,32位有4G的内存限制。需要注意的是,32位jvm的堆内存实际可设的大小还受操作系统的限制。Hotspot VM,在Windows下,最大的堆内存大约在1.5G左右;在基于较新的linux kernel的Linux系统下,其限制在2.5到3G之间,在早前的linux kernel下,大约在2G左右;在Solaris下,为3.3G左右。64位的hotspot ...原创 2014-10-18 16:14:06 · 300 阅读 · 0 评论 -
JAVA 线程池源码分析
java5之后为我们提供了线程池,只需要使用API,不用去考虑线程池里特殊的处理机制。Java5的线程池分好多种:固定尺寸的线程池、可变尺寸连接池等。常用的是ThreadPoolExecutor,它的继承关系如下: 下面详细说明一下自定义线程的使用:TreadPoolExecutor的常用构造方法如下:public ThreadPoolExecutor(int coreP...原创 2014-10-08 10:07:42 · 130 阅读 · 0 评论 -
如何用Java编写一段代码引发内存泄露
本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码。 Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码。这个问题我一点思路都没有,好囧。A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中) 1、应用程序创建一个长时间运行的线程(或者使用线程池,会更...原创 2014-09-04 09:36:52 · 457 阅读 · 0 评论 -
synchronized 的不足之处
1、不能够跨越多个对象。 2、当在等待锁对象的时候,不能中途放弃,直到成功。 3、等待没有超时限制。 4、不能中断阻塞。原创 2013-04-24 15:38:53 · 176 阅读 · 0 评论 -
http常用状态码说明
300客户端请求一个实际指向多个资源的URL时会返回这个状态码。301在请求的URL已被移除时使用,响应的Location首部中应该包含资源现在所处的URL。 400用于告知客户端发送了一个错误的请求。 401客户端未取得认证。 403请求被服务器拒绝。404服务器无法找到所请求的URL。...原创 2013-02-28 15:02:32 · 83 阅读 · 0 评论 -
23种设计模式总结
下面我总结我一下我的记忆方法,希望给大家分享。 首先列出23种设计模式1 Singleton 单件 2 Abstract Factory 抽象工厂模式 3 Builder 生成器模式 4 Factory Method 工厂方法模式 5 Prototype 原型模式 6 Adapter 适配器模式 7 Bridge 桥接模式 8 Composite 组合模式 9 Decorator 装饰模式 1...原创 2013-02-19 09:38:32 · 80 阅读 · 0 评论 -
【转】SharedHashMap是更低延迟无GC暂停的Map实现
SharedHashMap是开源工具OpenHFT一个子项目,SharedHashMap提供ConcurrentHashMap更低延迟无JVM的GC暂停的实现。两个特点是:1.所有元素都保存在Java heap之外,这样就不受GC影响,没有GC暂停。2.所有元素都在一个共享内存区域,对所有进程都是可视的。SharedHashMap采取的是"no-copy"模型,能够提供off-heap堆内存...原创 2014-06-05 19:40:46 · 224 阅读 · 0 评论 -
【转】AbstractQueuedSynchronizer的介绍和原理分析
简介提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态。然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同...原创 2014-05-06 15:35:44 · 118 阅读 · 0 评论 -
负载均衡的基本算法
1、随机:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它。虽然许多均衡产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重。 2、轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度、连接速度和内存等...原创 2014-11-25 10:46:07 · 134 阅读 · 0 评论 -
【转】Java常见内存溢出异常分析
Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。栈溢出(StackOverflowError)栈溢出抛出java.lang.StackOverflowError错误...原创 2015-02-03 14:33:50 · 55 阅读 · 0 评论 -
100个高质量Java开发者博客
名称(站点名或人名)国家备注1Adam Bien德国Java EE相关2Antonio Goncalves法国Java EE相关(《Java EE 5》和《Java EE 7》的作者)3Henrik Warne瑞典编程过程中的一些思考4Billy Yarosh美国Java日常开发中的实用代码示...原创 2015-02-03 14:36:16 · 88 阅读 · 0 评论 -
跟我学系列之Netty源码图
客户端结构: 服务端结构:原创 2015-04-30 13:28:41 · 182 阅读 · 0 评论 -
跟我学系列之NIO的那些坑
public class EchoServer { public static int DEFAULT_PORT = 7777; public static void main(String[] args) throws IOException { System.out.println("Listening for connection...原创 2015-04-30 10:06:56 · 207 阅读 · 0 评论 -
临时记录
mvn deploy -Dmaven.test.skip=true http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redishttp://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage原创 2015-04-09 15:49:31 · 72 阅读 · 0 评论 -
单例模式与垃圾回收
讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收。首先说一下为什么会产生这一疑问,笔者本人再此之前从来没有考虑过垃圾回收对单例模式的影响,直到去年读了一本书,《设计模式之禅》秦小波著。在书中提到在j2ee应用中,jvm垃圾回收机制会把长久不用的单例类对象当作垃圾,并在cpu空闲的时候对其进行回收。之前读过的几本设计模式的书,包括《java与模式》,书中都没有提到jvm垃...原创 2015-04-07 15:57:54 · 153 阅读 · 0 评论 -
使用Eclipse MAT查找内存泄漏工具介绍
一、MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 二、...原创 2015-03-14 11:27:56 · 214 阅读 · 0 评论 -
JVM JSTAT命令的用法和参数讲解
一、常用命令分析1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。2.jstat -gccapacity pid 可以显示,VM内存中三代(young,old,...原创 2015-03-14 11:01:27 · 191 阅读 · 0 评论 -
【转】RPC技术简介
思考一下分布式系统中的 RPC (Remote Procedure Call) 问题,一个完整的 RPC 模块需要可以分为三个层次服务层(service):RPC 接口定义与实现协议层(protocol):RPC 报文格式和数据编码格式传输层(transport):实现底层的通信(如 socket)以及系统相关的功能(如事件循环、多线程)在实际的大型分布式系统中,不同的服务...原创 2015-03-13 10:46:58 · 80 阅读 · 0 评论 -
【转】Java Executor框架在多线程应用中的使用
java平台一直对并发程序设计和多线程有这很好的支持。但在早期这种支持也只是在应用层调用原生结构,这种方式最大的缺陷就是使这些原始构件有效的被调用;否则,应用将不能正确运行或者不能达到期望结果。 Executor框架自java1.5中被作为comcurrency包的一部分被引入。它是java多线程的一个抽象层实现,并且作为java中首个实用的并发框架被用来标准调用、在并行线程中调度、执...原创 2015-03-10 14:16:49 · 148 阅读 · 0 评论 -
NIO DirectByteBuffer 内存泄露的测试
写NIO程序经常使用ByteBuffer来读取或者写入数据,那么使用ByteBuffer.allocate(capability)还是使用ByteBuffer.allocteDirect(capability)来分配缓存了?第一种方式是分配JVM堆内存,属于GC管辖范围,由于需要拷贝所以速度相对较慢;第二种方式是分配OS本地内存,不属于GC管辖范围,由于不需要内存拷贝所以速度相对较快。...原创 2015-03-03 17:24:47 · 187 阅读 · 0 评论 -
火车运煤算法--全面解析
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大――每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市? 这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000...原创 2015-03-02 09:51:43 · 555 阅读 · 0 评论 -
NIO 水平触发,边缘触发的区别
在linux的IO多路复用中有水平触发,边缘触发两种模式,这两种模式的区别如下: 水平触发:如果文件描述符已经就绪可以非阻塞的执行IO操作了,此时会触发通知.允许在任意时刻重复检测IO的状态,没有必要每次描述符就绪后尽可能多的执行IO.select,poll就属于水平触发. 边缘触发:如果文件描述符自上次状态改变后有新的IO活动到来,此时会触发通知.在收到一个IO事...原创 2015-02-27 18:21:49 · 449 阅读 · 0 评论 -
java UncaughtExceptionHandler 处理线程意外中止
Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try...catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。 JDK5.0之前,不能为单独的Thread设置Uncaught...原创 2014-05-06 10:32:44 · 88 阅读 · 0 评论 -
【转】细数JDK里的设计模式
原文出处: javacodegeeks 译文出处: deepinmind结构型模式:适配器模式:用来把一个接口转化成另一个接口。java.util.Arrays#asList()javax.swing.JTable(TableModel)java.io.InputStreamReader(InputStream)java.io.OutputStreamWri...原创 2014-03-14 08:59:57 · 68 阅读 · 0 评论 -
JAVA并发类名图
这张图值得收藏!原创 2014-03-13 15:43:48 · 66 阅读 · 0 评论 -
在Centos下安装Nginx教程
在centos中安装nginx,官网中有很多个版本中,我试了nginx-0.8.55和nginx-0.6.39但在安装的时候总是提示各种编译错误,不管是重新编译C文件,还是修改就是不可以。 后来下载了官网的nginx-1.5.6版本,就能够安装成功。 1、首先从http://nginx.org/en/download.html下载nginx-1.5.6版本并且使用命令tar -zxvf...原创 2013-10-23 19:17:05 · 67 阅读 · 0 评论 -
NIO和IO的区别
Java NIO编程 提供了对块IO的支持,使用块IO的好处是效率更高 1. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 ) 2. Java 标准 io 回顾 Java ...原创 2013-10-15 15:17:49 · 138 阅读 · 0 评论 -
一段JAVA线程池的设置引发的血案
应公司需求我们对一个项目进行了线上压力测试,结果发现,三台服务器一共只有59TPS,结果惨不忍睹。那么针对这样的场景,我们利用一周时间进行专注性的优化,寻找性能的瓶颈点。 第一步:我们针对线上的环境进行模拟,尽量真实的在测试环境中再现,采用数据库连接池为咱们默认的C3P0。那么当压测到二万批,100个用户同时访问的时候,并发量突然降为零!报错如下:Could ...原创 2015-07-18 17:59:21 · 160 阅读 · 0 评论 -
GC日志分析
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+Print...原创 2015-07-10 14:14:14 · 92 阅读 · 0 评论 -
【转】Java常见内存溢出异常分析
Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。 栈溢出(StackOverflowError) 栈溢出抛出java.lang.StackOverflowError错误,出...原创 2015-07-10 14:11:01 · 71 阅读 · 0 评论 -
线程池在任何场景下都比顺序执行快吗??
有时候并不是在任何场景下使用线程池,效率都比顺序执行程序快,请看下面例子程序: 这是使用线程池程序。 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, noca...原创 2015-06-30 17:32:09 · 313 阅读 · 0 评论 -
一致性HASH算法的JAVA实现
[size=medium] 一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 一致性...原创 2012-05-25 09:21:29 · 269 阅读 · 0 评论 -
在什么情况下使用JAVA缓存
在什么情况下使用缓存呢? 1、经常变化的数据,但是不需要立刻进行持久化的。 2、经常被大量的读取,很少进行更新操作的。 3、大量的数据库IO操作。 4、一些通用的页面,例如JS、CSS、图片等。 5、统计和计算需要暂存的信息,需要加快计算的。...原创 2012-05-16 09:57:18 · 312 阅读 · 0 评论 -
ExecutorService和CompletionService的区别
我们现在在Java中使用多线程通常不会直接用Thread对象了,而是会用到java.util.concurrent包下的ExecutorService类来初始化一个线程池供我们使用。之前我一直习惯自己维护一个list保存submit的callable task所返回的Future对象。在主线程中遍历这个list并调用Future的get()方法取到Task的返回值。 但是,我在很多...原创 2012-05-11 11:29:08 · 62 阅读 · 0 评论 -
Volatile的用法范围
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注...原创 2012-05-10 11:20:19 · 110 阅读 · 0 评论 -
关于字节序的讨论
字节序,顾名思义就是字节存放的顺序字节序分为两种:BIG-ENDIAN----大字节序LITTLE-ENDIAN----小字节序BIG-ENDIAN、LITTLE-ENDIAN与多字节类型的数据有关的比如int,short,long型,而对单字节数据byte却没有影响。BIG-ENDIAN就是最低地址存放最高有效字节。LITTLE-ENDIAN是最低地址存放最低有效...原创 2012-05-04 09:33:40 · 86 阅读 · 0 评论