自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

root先生的博客

一花一世界 一叶一如来

  • 博客(35)
  • 收藏
  • 关注

原创 OMM

OMM主要三类: permgen OOM ,heap OOM, stack overflow permgen OOM: 这个主要是由于加载的类太多,或者反射的类太多,还有调用 String.intend(jdk7之前)也会造成这个问题。所以出现了这个问题,就检查这三个方面;heap OOM:主要是因为一些无用对象没有及时释放造成的,检查代码加上 heap dump 去分析.stack

2017-07-19 09:56:28 2138

原创 NIO

NIO最重要的组件是Buffer与Channel。Buffer是一个抽象类,原生类型都有一个Buffer(int,char,float,Double等)NIO的Buffer提供了一个可以直接访问物理内存的类DirectBuffer,DirectBuffer继承自ByteBuffer。普通的ByteBuffer在JVM堆上分空间,收到最大堆的限制。但DirectBuffer直接分配在物理内存中。

2017-07-19 09:56:16 385

原创 内存映射文件:MappedByteBuffer

内存映射文件:MappedByteBuffer 内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件。有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问。这种解决办法能大大简化修改文件的代码。 FileChannel提供了map方法来把文件影射为内存映像文件:fileChannel.map(FileChannel.MapMode mode,

2017-07-19 09:55:59 542

原创 Java集合架构

java集合的架构。主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。1. List的实现类主要有:LinkedList, ArrayList, Vector, Stack。(01) LinkedList是双向链表实现的双端队列;它不是线程安全的,只适用于单线程。(02) ArrayList是数组实现的队列,它是一个

2017-07-18 20:37:54 414

原创 CountDownLatch与CyclicBarrier

CountDownLatch:CountDownLatch是通过“共享锁”实现的。在创建CountDownLatch中时,会传递一个int类型参数count,该参数是“锁计数器”的初始状态,表示该“共享锁”最多能被count给线程同时获取。当某线程调用该CountDownLatch对象的await()方法时,该线程会等待“共享锁”可用时,才能获取“共享锁”进而继续运行。而“共享锁”可用的条件,

2017-07-18 20:36:34 323

原创 AQS

AQS -- 指AbstractQueuedSynchronizer类。ReentrantLock把所有Lock接口的操作都委派到一个Sync类上,该类继承了AQS.AbstractQueuedSynchronizer中抽象了绝大多数Lock的功能,而只把tryAcquire方法延迟到子类中实现。    AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是

2017-07-18 20:34:33 859

原创 Interrupt

当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此时调用线程的interrupt()将线程的中断标记设为true。由于处于阻塞状态,中断标记会被清除,同时产生一个InterruptedException异常。将InterruptedException放在适当的位置就能终止线程。当线程处于运行状态,并且我们需要终止它时;可以调用线程的interrupt()

2017-07-18 20:33:46 486

原创 ReentrantLock与synchronized

Synchronized确保变量在内存的可见性 - 即当读写两个线程同时访问同一个变量时,synchronized用于确保写线程更新变量后,读线程再访问该变量时可以读取到该变量最新的值。因为根据“对一个监视器的解锁操作happens-before于每一个后续对同一个监视器的加锁操作。”锁不仅仅是关于同步于互斥的,也是关于内存可见性的。无锁框架Amino:氨基酸Amino是A

2017-07-18 20:27:28 445

原创 buffer与cache

缓冲buffer是为了协调上层组件与下层组件的性能差异的。缓存cache是为了暂存数据处理结果,提升性能的。它将来之不易的数据处理结果暂存,当有新的请求时,高速响应。Java有很多缓存框架,EHCache,OSCache(可以缓存各种对象),JBossCache。对于普通Java对象,当经常使用,并且创建费时的大对象,可以考虑池化,即减少获得对象的成本,又降低频繁GC的系统压力。池的思想就

2017-07-18 20:25:56 248

原创 同步容器

同步容器:(vector,hashtable)以及Collections类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。java中常用的HashSet、ArrayList、HashMap都是线程不安全的,通过直接将新建的集合传给了Collections的synchronizedXxx方法,这样就直接获取它们的线程安

2017-07-18 20:24:30 288

原创 CAS

java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包。java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而

2017-07-18 20:23:33 462

原创 线程池

线程池:实现一个pool,预先一个list有若干个thread;做getThread,与repoolThread;实现一个Thread类,接受Runnable,平时wait(this),一旦enable时,notify(this);调用时实现一个Runnable的对象,传给pool,由Thread类接收run。Executor框架:位于java.util.concurrent并发包中,是一

2017-07-18 20:21:33 258

原创 Java常见设计模式

单列类模式的设计可以减少new与gc的频度,优化内存使用。即便是内部静态类(延迟加载),也可以通过反射强制生成多个实例。享元模式(Flyweight)就是一个对象池+类厂,内部维护一个缓存。当有一个新的对象请求时,若缓存中有,就取出返回(共用一个对象);否则新建一个类型的对象,加入缓存。它与对象池不同的是,缓存中的对象可以是不同类型的,而且只有一份。装饰模式(Decorator)也叫包装器

2017-07-18 20:17:58 353

原创 JMM

Java内存模型是定义程序中各个变量的访问规则,包括了实例字段,静态字段,数组对象等。不含有局部变量及方法参数。Java内存模型规定了全部变量都记录在主内存,每条线程还有自己的工作内存。线程对变量的读写只能在工作内存中。对于不同内存之间的操作,Java模型仅规定了read,load,store,write的顺序,而这些指令中可以插入别的指令。volatile在各个线程的工作内存中不存在

2017-06-02 19:14:24 342

原创 JSP

forward是控制权的转移,浏览器不会显示地址。redirect是跳转,浏览器会看见地址。forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚

2017-06-02 19:13:08 394

原创 异常

Java 中,所有的异常都有一个共同的祖先Throwable(可抛出)error都是继承自父类java.lang.Error,而exception都继承自java.lang.Exception.Throwable:有两个重要的子类:Exception(异常)和 Error(错误)Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关

2017-06-02 19:12:13 282

原创 笔记3

使用MVC的最大好处就是代码重用。最重要的一点是多个视图能共享一个模型。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。 MVC的缺点是MVC没有明确的定义。 局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量.abstract的method

2017-06-02 19:11:43 256

原创 笔记2

:问题:抽象:Java支持创建只有接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。抽象和封装的不同点:抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。 Iterator和ListIterator的区别是什么?Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

2017-06-02 19:10:13 305

原创 Java并发库

:Java并发库:(重要)Java1.5以后为了解决多线程并发,死锁等问题引入的工具包。java.util.concurrent。包含:ExecutorService:线程池,submit有返回值,而execute没有1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而

2017-06-02 19:08:20 501

原创 改善Java程序的151个建议 笔记

四舍六入五取偶Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。包装类型,基本类型的函数参数,可以构成重载。包装类型,不能自动加宽。随机数种子若相同,即使实例不同,也能产生相同的随机数。 不要覆写static方法:覆写的static方法在调用时会调用表面类型的方法,而非实际类型的,故多态失效。//执行顺序:(优

2017-05-24 19:29:38 388

原创 SpringMVC 1

当有http请求时,web容器根据web.xml中的url-pattern找到对应的SpringMVC入口Servlet:org.springframework.web.servlet.DispatcherServlet,DispatcherServler取得其配置文件xml中定义的context:component-scan即controler的包路径。若是通过注解,需在xml中设置annota

2017-05-24 19:27:54 288

原创 拦截器与过滤器

拦截器(Interceptor)是 struct2的概念,是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.过滤器,是在java web中,你传入的request,response前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url

2017-05-24 19:27:12 251

原创 ORM

Spring提供DAO的支持是为了以一致的方式访问数据库。Spring支持DAO需引入org.springframework.jdbc.core.JdbcTemplate包。注入DataSource。JDBCTemplet最好被注入进DAO。 Hibernate:是一个开源的轻量级的ORM对象关系映射(Object-Relation(关系型数据库)Mapping)框架,它在底层对j

2017-05-24 19:26:06 412

原创 AOP与代理

AOP静态代理:面向切面编程。将日志,参数合法性,用户权限等重复的操作(这些事情不得不做,但做了会影响逻辑代码)提取,专注于业务逻辑。AOP的思想就是代理模式。AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低。面向切面就是在正常的流程上切一刀,在切的这一面做事。静态代理是设计模式,动态代理是一种技术,通过反射机制实现。 JDK动态代理使用java.

2017-05-24 19:25:05 307

原创 框架

context->lisener->filter(chain.doFilter(),可以搞cors)->servletSpring MVC 的入口是 DispatcherServlet, 而 Struts2 是 FilterDispatcher.Struts2:Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。Strut

2017-05-24 19:23:37 454

原创 引用

从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。对于强引用,我们平时在编写代码时经常会用到(普通引用)。而对于其他三种类型的引用,使用得最多的就是软引用(最多)和弱引用,这2种既有相似之处又有区别。它们都是用来描述非必需对象的,但是

2017-05-17 18:28:08 328

原创 泛型

类型参数化。可以简化类型转化,所有的类型转化均是隐式的。将类型的转换从运行时转到编译期。泛型T跟在类声明的后面,T在类对象生成时被确定。以后T全部被替换为对象生成时的类型。如:List和List在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。通常来说,如果Foo是Bar的子类型,G是一种带泛型的类型,则G不是G的子类型。泛型处理必须的类的类型,不能处理基本类型。

2017-05-17 18:26:17 301

原创 NIO

NIO:阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回。Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 java NIO的工作原理:1. 由一个专门的线程来处理所有的 IO 事件,并负责

2017-05-17 18:25:25 370

原创 注解

注解的作用:            1、生成文档。这是最常见的,也是java最早提供的注解。常用的有@see @param @return 等            2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。             3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆

2017-05-17 18:24:09 603

原创 类集

类集:Java实现的数据结构。包括Collection,List,Set;Map;Iterator,EnumerationCollection:是真个类集中单值保存的最大父接口。一般直接使用它的2个子接口List(允许重复),Set(不允许重复)。Interface Collection. Collection->List->ArrayListList:子类为:ArrayLis

2017-05-17 18:21:08 335

原创 对象序列化

对象序列化:将保存在内存中的对象数据转换为二进制流传送另一个设备。序列化就是将某个对象的属性内容保存。(不含方法),如某个属性不需序列化,就将该属性在声明的时候带transient。需序列化的类必须实现Serializable接口.定义serialVersionUID是为了标示版本。Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序

2017-05-17 18:19:53 278

原创 Java类加载:(重点)

双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回(返回的是java.lang.Class的类对象);只有父类加载器无法完成此加载任务时,才自己去加载。委托机制的意义— 防止内存中出现多份同样的字节码  Java类(并非对象)加载分为:加载,链接,初始化:加载: Java字节代码

2017-05-15 11:15:19 394

原创 反射

8:反射:"反":即可以通过对象取得对象的出处。因Object类对象可以通过getClass()取得class。实例化对象有三种方式:new,clone,反射 在Java中,类是Class类的一个对象:java.lang.Class:是反射的源头,全部的反射均从此开始。Class类对象的实例化有三种办法:1:      obj.getClass()2:通过  类名.

2017-05-15 11:13:22 312

原创 Java工具类1

StringBuffer类:StringBuilderString类一旦定义,就不能改变,只能改变String对象引用。任何一个字符都是String类的匿名对象。String 与StringBuffer 均派生于CharSequence。StringBuffer是线程安全的,StringBuilder(优先)不是。 RunTime类:每个JVM进程中均有一个RunTime类

2017-05-15 11:04:08 323

原创 Java 线程

1:Java有三种线程实现:继承Thread类;也是实现了Runnable接口,Thread类也是Runnable接口的子类。实现Runnable接口;是@FunctoinalInterface,函数式接口,只有唯一一个抽象方法。interface的方法默认是public的。不存在默认权限。实现Callable接口;Callable接口是为了解决Runnable不能有返回值的。na

2017-05-12 19:22:40 351

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除