自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (15)
  • 问答 (2)
  • 收藏
  • 关注

原创 内存分配策略与回收策略

内存分配策略与回收策略给对象分配内存以及回收给对象分配的内存。对象的内存分配绝大部分主要是在Java堆上,有一部分特殊的就是JIT编译器,经过JIT编译后被拆散为标量类型并间接地在栈上分配内存。对象主要分配集中在新生代的Eden区,如果启动了本地线程分配缓冲,按照线程优先在TLAB上分配。少数分配在老年代,分配在哪里取决于当前使用的垃圾回收器组合和虚拟机中相关内存参数的设定。

2015-06-29 21:01:55 1095

原创 理解GC日志

理解GC 日志如何查看GC日志设置参数 :-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log/** * * -verbose:[class|gc|jni] 在输出设备上显示虚拟机运行信息。 * -verbose:class 显示有多少个类被加载 * -verbose:gc 在虚拟机发生内存

2015-06-29 19:03:43 795

原创 垃圾回收器介绍

垃圾回收器介绍没有最好的垃圾回收器,没有万能的回收器,我们只是在对应的应用选择合适的垃圾收集器注意区分并发和并行并发concurrent:用户线程和垃圾收集线程同时工作。并行parallel:多个垃圾收集线程同时工作,用户线程仍然在等待一、Serial收集器在jdk1.3之前,是虚拟机新生代收集的唯一选择。这是一个单线程的收集器,只使用一个收集线程完成收集工作,在进

2015-06-29 16:42:50 820

原创 垃圾回收算法

垃圾回收算法一、标记-清除算法 Mark-Sweep首先,标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。问题:1、效率不高2、标记完成后产生大量的内存碎片。空间碎片太多可能导致以后在程序运行过程中需要分配较大对象时,无法找到足够的内存而不得不提前触发另一次垃圾收集动作。二、复制算法 Copying为了解决效率问题和碎片问题。算法思想:将可用

2015-06-29 14:26:19 405

原创 垃圾回收器概述

垃圾回收要考虑的问题1、那些内存需要回收?2、什么时候回收?3、如何回收?如何判断对象"已死"?一、Reference Counting ---- 引用计数法1、算法思想给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器减一。任何时刻,计数器值为0的对象就是不可能再被使用的。2、采用这种方式的案例微软的C

2015-06-29 12:53:38 660

原创 测试OOM异常

一、Java堆溢出内存溢出和内存泄露内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用package com.weixuan.outofmemory;imp

2015-06-26 00:15:46 2141

原创 Java内存区域与内存溢出异常

第一部分:Java内存模型一、Java内存模型二、程序计数器1、这是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。2、程序计数器是线程私有内存Java虚拟机的多线程是通

2015-06-25 17:43:45 694

原创 Java并发编程-总结-21-33

二十一、死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务。死锁的发生必须满足以下四个条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强

2015-06-23 14:34:40 773

原创 Java并发编程-总结-11-20

十一、start()和run()的区别start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。public synchronized void start() { /** *

2015-06-22 23:13:18 703

原创 Java并发编程-总结-01-10

一、什么是并发?并发是一个程序同时执行多个计算的能力。这可以通过把计算分布在一个机器可用的CPU内核上或者甚至在同一网络上的不同的机器来实现。二、进程和线程的区别是什么?进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程:线程是进程的一个实体,是CPU调度和分派的基本单位进程与线程的区别:

2015-06-22 14:59:24 678

原创 Java并发编程-36-原子数组

一、同步机制存在的问题1、死锁2、即使只有一个线程访问这个对象,仍然需要执行必须的代码来获取和释放锁二、Compare-and-Swap-Operation1、取得变量值,即变量的旧值2、在一个临时变量中修改变量值,即变量的新值3、如果上面获得的变量旧值与当前变量值相等,就用新值替换旧值。如果已有其他线程修改了这个变量的值,上面获得的变量的旧值就可能与当前变量值

2015-06-21 17:37:33 718

原创 Java并发编程-35-原子变量-atomic

一、原子变量原子变量是Java 5 开始引入的,他提供了单个变量上的原子操作。当一个线程在对原子变量操作时,如果其他线程也试图对对同一原子变量执行操作,原子变量的实现类提供了一套机制来检查操作是否在一步内完成。这个操作下 获取变量值,然后在本地改变变量的值,然后试图用这个改变的值去替换之前的值。如果之前的值没有被其他线程改变,就可以执行这个替换操作。否则,方法将再执行这个操作。这种

2015-06-21 17:08:45 822

原创 Java并发编程-34-生成并发随机数-ThreadLocalRandom

一、ThreadLocalRandom这是一个线程本地变量,每个生成随机数的线程都有一个不同的生成器,但是都在同一个类中被管理。current()方法:这是一个静态方法,返回与当前线程关联的TaskLocalRandom对象,所以可以使用这个对象生成随机数 public static ThreadLocalRandom current() { if (

2015-06-21 11:19:44 4312

原创 Java并发编程-33-线程安全的可遍历映射

一、ConcurrentNavigableMap这个接口的类用一下两个部分存放元素一个键值,他是元素的唯一标识元素的其他部分数据二、ConcurrentSkipListMap这个类内部使用了Skip List来存放数据,Skip List是基于并发列表的数据结构,效率与二叉树相近参考这里三、测试package com.

2015-06-21 11:04:46 1545

原创 Java并发编程-32-带有延迟元素的队列-DelayQueue

一、DelayQueue可以存放带有激活日期的元素,当调用方法从队列中返回或提取元素时,未来日期的元素将被忽略package concurrencycollection;import java.util.Date;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public

2015-06-21 00:23:21 2371

原创 Java并发编程-31-阻塞式优先级列表-PriorityBlockingQueue

一、PriorityBlockingQueue1、PriorityBlockingQueue里面的元素必须实现Comparable接口2、PriorityBlockingQueue,这个是阻塞式数据结构,当调用的方法不能立即执行时,调用这个方法的线程将被阻塞直到方法可以成功执行二、测试package concurrencycollection;pub

2015-06-20 21:49:00 739

原创 Java并发编程-30-阻塞式线程安全列表-LinkedBlockingDeque

一、LinkedBlockingDeque这是阻塞式列表:列表为空或者已满,操作不会被立即执行,而是将调用这个操作的线程阻塞到队列直到操作可以执行成功主要操作:public E take() throws InterruptedException { return takeFirst(); }从列表中取出字符串,如果列表为空,调用这个方法的线程可能会被阻

2015-06-20 20:41:14 3124

原创 Java并发编程-29-非阻塞式线程安全列表-ConcurrentLinkedDeque

一、ConcurrentLinkedDequepublic class ConcurrentLinkedDeque extends AbstractCollection implements Deque, java.io.Serializable提供的方法二、主要的方法public E pollFirst()public E pol

2015-06-20 12:14:14 2428

原创 Java并发编程-28-并发集合概述

一、基础概念1、同步和异步 ----描述的是通信模式同步:发送方发送请求后,需要等待接收方发回的响应后,才能发送下一个请求。所有的请求在服务器端得到同步,发送方和接收方对请求的处理步调是一致的异步:发送方发送请求后,不等待接收方响应这个请求,就继续发送下一个请求。所有来自发送方的请求形成一个队列,接收方处理完成后通知发送方2、阻塞和非阻塞 ---- 描述的是进程处理调用模式

2015-06-19 22:16:53 683

原创 Java并发编程-27-异常处理及取消任务

一、取消任务ForkJoinTask类提供的cancel()方法允许取消一个仍没有被执行的任务任务的取消对于已经发送到线程池的任务没有任何影响,他们将继续执行Fork/Join框架的局限性在于,ForkJoinPool线程池中的任务不允许被取消示例中:我们创建一个辅助类,它储存发送到线程池所有任务。可以用一个方法来取消存储的所有任务,如果任务已经执行或者结束,那么任务就不可能被

2015-06-18 21:49:10 1040

原创 Java并发编程-26-异步运行任务

一、异步运行任务在ForkJoinPool中执行ForkJoinTask时,可以采用同步或者异步的方式。同步:发送给Fork/Join线程池的方法知道任务执行完成后才会返回结果异步:发送给执行器的方法将立即返回结果,但是任务仍能够继续执行二、区别同步方式:比如invokeAll()方法,调用这些方法时,任务被挂起,直到任务被发送到Fork/Join线程池中执

2015-06-18 19:37:16 1369

原创 Java并发编程-25-合并任务的结果

一、合并任务的结果Fork/Join 框架提供了执行任务并返回结果的能力,这些类型的任务都是通过RecursiveTask类实现的RecursiveTask 类继承了ForkJoinTask类,并且实现了由执行器框架提供的Future接口二、get()方法get()方法是Future接口提供的,RecursiveTask类实现了这个接口,可以直接调用这个方法,返回Tas

2015-06-18 18:46:17 1999

原创 Java并发编程-24-创建Fork/Join线程池

一、使用Fork/Join的步骤1、创建用来执行任务的ForkJoinPool对象2、创建即将在线程池中被执行的任务ForkJoinTask子类/或者ForkJoinAction子类3、实现上述子类的compute方法,对任务的分解4、调用ForkJoinPool对象的execute()方法执行任务二、方法说明1、Fork/Join---invokeAl

2015-06-18 18:24:15 2015

原创 Java并发编程-23-Fork/Join 框架概述

一、Java 并发的总结1、通常,使用Java开发简单的并发应用程序时,会创建一些Runnable对象,然后创建对应的Thread对象来控制程序这些线程的创建,执行,以及线程的状态2、Java 5引入了Executor和ExecutorService接口以及实现这两个接口的的类,比如ThreadPoolExecutor之后,使得Java在并发上得到进一步的提升,执行器框架将任务的创建和

2015-06-17 23:00:35 907

原创 Java并发编程-22-处理在执行器中被拒绝的任务

一、被拒绝的任务1、当我们想结束执行器的执行时,调用shutDown()方法2、但是,执行器只有等待正在运行的任务或者等待执行任务结束之后,才能真正结束3、如果在执行器shutDown()之后,发送一个任务给执行器,这个任务会被拒绝二、RejectedExecutionHandler接口这个接口只有一个方法void rejectedExecuti

2015-06-17 21:40:55 2433

原创 Java并发编程-21-在执行器中分离任务的启动与结果的处理

一、在执行器中分离任务的启动与结果的处理1、通常情况下,使用线程执行器来执行并发任务,将runnable或callable任务发送给线程执行器,并获得Future对象来控制任务2、特殊情形:在一个对象里发送任务给执行器,然后在另一个对象里处理结果3、应运而生的CompletionService类二、CompletionService1、CompletionSer

2015-06-17 21:08:52 784

原创 Java并发编程-20-在执行器中取消任务和控制任务的完成

一、在执行器中取消任务使用执行器,不需要管理线程,只需要实现Runnable或Callable 任务,并发送任务给执行器即可执行器负责创建线程,管理线程池中的线程,当线程不再需要时就销毁它们有时,可能需要取消以发送给执行器的任务,可以使用Future的cancel()方法package com.concurrency.executor;import java.util.co

2015-06-17 18:18:04 1375

原创 Java并发编程-19-在执行器中延时执行任务和周期性执行任务

一、在执行器中延时执行任务1、使用ScheduledThreadPoolExecutor类2、schedule()方法 接收Callable对象或者Runnable对象 public ScheduledFuture schedule(Callable callable, long dela

2015-06-17 16:59:39 1874

原创 Java并发编程-18-在执行器中执行任务并处理结果

一、运行多个任务并处理第一个结果invokeAny()方法接受一个任务列表,然后运行任务,并返回第一个完成的任务并且没有抛出异常的任务的执行的结果1、两个任务都返回true值:invokeAny()返回首先完成任务的名称2、第一个任务返回true,第二个抛出异常,返回第一个任务执行的结果3、第一个任务抛出异常,第二个返回true,返回第二个任务执行的结果4、两个任务都抛出异

2015-06-17 15:53:01 734

原创 Java并发编程-17-在执行器中执行任务并返回结果

一、在执行器中执行任务并返回结果基于Callable接口和Future接口Callable接口:这个接口声明了Call方法,可以在这个方法里面实现任务的具体逻辑操作。这个接口是一个范型接口,这就意味着必须声明call()方法返回的数据类型Future接口:这个接口声明了一些方法来获取Callable对象产生的结果,并管理他们的状态Callable接口:@Function

2015-06-17 14:49:28 911

原创 Java并发编程-16-线程执行器-Executor Framework

一、Executor FrameWork核心是Executor接口及其子接口ExecutorService以及实现这两个接口的ThreadPoolExecutor类Executor接口---(注意是Executor接口)这个接口只有一个方法,他的参数是Runnable 对象void execute(Runnable command)ExecutorService

2015-06-17 13:04:10 825

原创 Java并发编程-15-并发任务间数据交换

一、并发阶段的数据交换Exchanger辅助类:允许在并发任务之间交换数据即:Exchanger类允许在两个线程之间定义同步点,当两个线程都到达同步点时,它们交换数据结构。二、生产者-消费者问题package com.weixuan.test;import java.util.List;import java.util.concurrent.Exchanger;p

2015-06-16 19:58:07 658

原创 Java并发编程-14-并发阶段任务的运行-Phaser

一、并发阶段任务的运行及切换作用:允许执行并发多阶段任务-----将一个并发任务分解成几步执行与其他辅助类不同的是:可以动态的增加或者减少任务数二、模拟使用phaser同步三个并发任务。这三个任务在三个不同的文件夹及子文件夹查找过去24小时内修改过苦熬站名为.log的文件步骤:1.在指定的文件夹及其子文件夹获得扩展名为.log的文件2.对第一步结果进行过滤:

2015-06-16 18:08:04 1028

原创 Java并发编程-13-在集合点的同步-CyclicBarrier

一、CyclicBarrier同步辅助类作用:允许两个或者多个线程在某个点上进行同步1、CyclicBarrier类使用一个整型数进行初始化,这个数是需要在某个点上同步的线程数2、当一个线程到达指定的点后,它将调用await()方法等待其他线程。当线程调用await()方法后,CyclicBarrier类将阻塞这个线程并使之休眠直到其他所有线程到达3、当最后一个线程调用Cycl

2015-06-16 16:02:55 727

原创 Java并发编程-12-等待多个并发事件的完成-CountDownLatch

一、等待多个事件的完成CountDownLatch1、CountDownLatch是一个同步辅助类。在完成一组其他线程中执行的操作之前,它允许线程一直等待2、这个类使用一个整数进行初始化,这个整数就是线程要等待完成的操作的数目3、当一个线程要等待某些操作先执行完时,需要调用await()方法,这个方法让线程进入休眠直到所有的操作都完成4、当一个操作完成的时候,调用countDo

2015-06-16 14:02:20 1384

原创 Java并发编程-11-线程同步辅助类-semaphore

一、更高级的同步机制信号量Semaphore:是一种计数器,用来保护一个或多个共享资源的访问。CountDownLatch:在完成一组正在其他线程中执行的操作之前,它允许线程一直等待CyclicBarrier:它允许多个线程在某个集合点处进行相互等待Phaser:可以把并发任务分成多个阶段运行,在进行下一阶段之前,当前阶段的所有线程都必须执行完成Exchanger:提供两个线程之间的数据交

2015-06-16 13:04:58 686

原创 Java并发编程-10-在锁中使用多条件-生产者消费者问题

一、在锁中使用条件一个锁可能关联一个或多个条件,这些条件通过Condition接口声明目的是允许线程获取锁并且查看等待的某一个条件是否满足,如果不满足就挂起直到某个线程唤醒它们二、模拟实现fileMock是一个文件模拟类Buffer是一个数据缓冲区一个或者多个生产者读取fileMock的所有数据行,并且使用insert()方法将读取的数据行插入到缓冲区

2015-06-16 11:16:10 1246

原创 Java并发编程-09-使用读写锁同步数据访问

一、ReadWriteLock接口1、可以看出,这个是java1.5添加的2、主要的实现类是ReentrantReadWriteLock3、主要的方法是readLock()和writeLock()二、测试代码package com.concurrent.threadSynchronize;import java.util.concurre

2015-06-15 23:58:19 926

原创 Java并发编程-08-使用锁实现同步

一、使用锁实现同步基于Lock接口及其实现类,Lock接口及其实现类如下:二、和synchronized相比1、支持更灵活的代码块结构使用synchronized关键字时,只能在同一个synchronized块结构中获取和释放控制,Lock允许控制的获取和释放不在同一个块结构中2、Lock接口功能更强大3、Lock允许分离读和写操作,允许多个读线

2015-06-15 22:53:16 989

原创 Java并发编程-07-在同步代码中使用条件--生产者-消费者问题

一、在同步代码中使用条件wait()notify()notifyAll()二、 wait()1、只能在同步代码块中调用2、当一个线程调用wait()方法事,jvm将这个线程置入休眠,并且释放控制这个同步代码快的对象,同时允许其他线程执行这个对象控制的其他同步代码快3、为了唤醒这个线程,必须在这个对象控制的某个同步代码快调用notify()方法或者noti

2015-06-14 21:12:12 646

一张图python入门

一张图片包含python的基本操作 包括面对对象的基本知识 看完了基本可以对python有大概的认识和了解

2015-06-09

30分钟学会shell.docx

30分钟学会shell,shell快速入门,附带大量示例

2015-06-09

linux系统编程中文版

linux系统编程 中文版 带目录

2015-04-15

linux命令详解

linux命令详解,带有目录 前面是分类的命令 后面是每个命令的用法

2015-04-15

RSA算法的C语言实现

RSA算法的C语言实现,功能很简单,只是为了描述原理

2014-12-19

操作系统pv操作的经典习题

操作系统课程的资料 PV 操作的经典题目

2014-08-05

jdk1.7 英文版

jdk 1.7 的英文版,chm文档 零积分下载

2014-08-04

html建立超链接

html 建立超链接的详细内容介绍.从最基本的超链接到各种详细的html 超链接建立

2014-07-29

python运维的一些视频汇总和资料

运维必备Python基础入门到精通的视频课程汇总.里面是链接地址.一般全是免费的资料,需要花钱的里面有说明.

2014-07-28

redhat 7安装手册

虚拟机安装redhat7,有详细的步骤.这个是测试版,不是很稳定.有兴趣的可以试试

2014-04-27

尚观C语言培训系列视频下载地址

尚观的c语言视频教程,是两个人对话的形式展开的视频教程,需要的可以看看

2014-01-05

sublime 3059的注册机

sublime 3059 专用的注册机.3059版本之前的网上有注册机.在win8.1下测试成功.win8,win8.1以兼容模式和管理员打开即可.里面有说明文档,分32位和64位

2013-12-27

基于链表的城市数据库系统

这个使用codeblocks写的,基于线性表的城市数据库系统

2013-12-04

基于线性表的城市数据库系统

这个使用codeblocks写的,基于线性表的城市数据库系统

2013-12-04

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

TA关注的人

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