自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

转载 java基础---注解

以前对注解理解不深 现在回过头来再来看一下注解发现学到了很多东西很多例子复制于https://www.cnblogs.com/huojg-21442/p/7239846.html小伙伴们。今天我们来说说注解、标志@ 。针对java不同版本来说,注解的出现是在jdk1.5 但是在jdk1.5版本使用注解必须继续类的方法的重写,不能用于实现的接口中的方法实现,在jdk1.6环境下对于继续和实现...

2018-12-30 15:08:48 190

转载 RMI

此处讲的是Java中的RMI,而不是通用意义上的RMI,关于通用的RMI可以参考分布式之RPC的协议以及错误处理 这篇文章。https://blog.csdn.net/lmy86263/article/details/72594760?utm_source=copy 原文地址一、Java RMI简介Java RMI用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主...

2018-10-06 23:16:27 199

转载 进程间通信的五种方式

进程间通信(IPC)介绍https://blog.csdn.net/wh_sjc/article/details/70283843 原文进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams...

2018-09-21 13:47:30 213

转载 进程同步

原文地址:http://blog.csdn.net/speedme/article/details/17597373上篇博客中(进程同步之临界区域问题及Peterson算法),我们对临界区,临界资源,锁机制详细解读了下,留下了一个问题,就是锁机制只能判断临界资源是否被占用,所以他解决了互斥问题,但是他不能确定前面的进程是否完成,所以他不能用于同步问题中。下面就为你讲解信号量机制是如何解决这一问...

2018-09-20 22:56:52 308

原创 java集合---hashmap

 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。H...

2018-09-13 20:03:37 150

原创 java集合----hashset源代码

又看啦一下hashset源代码 大吃一惊 底层居然是hashmap 你能想的到 我相信第一次看的人 都会大吃一惊的。网上看到的 直接复制过来好啦。 去研究一下hashmap 其实hashset就是一个限制功能的hashmap。public class HashSet<E> extends AbstractSet<E> implements Set&...

2018-09-13 17:11:00 231

原创 arrayList源代码

好久不写博客啦 最近一直忙着面试,昨天面试官问我读没读过arraylist的源代码 瞬间蒙蔽,今天总结一下,以前感觉源代码都是好高大上的东西,今天自己结合百度读啦一下,发现源代码也并不难,最近会吧jdk中的源代码自己总结一下。我用的是jdk1.7这篇博客只总结主要的 构造器 add get set等方法 remove   iterator contains 其余的不去总结。有兴趣可以自己去...

2018-09-13 13:17:03 670

转载 java 网络编程

一、概述二、计算机网络 1.网络协议 2.网络体系结构三、OSI参考模型四、TCP/IP参考模型五、常见网络协议 1.TCP协议 2.UDP协议 3.HTTP协议六、计网常见问题七、Java网络编程原文地址 https://www.cnblogs.com/midiyu/p/7875574.html一、概述计算机网络是通过传输介质、通信设施和网...

2018-08-24 16:43:44 324

转载 深入理解计算机系统----第九章虚拟内存

原文链接 https://www.jianshu.com/p/e1b82b230917虚拟存储器又叫做虚拟内存,我们现在的操作系统普遍都支持了虚拟内存,这样做是因为我们同时运行着太多的程序了,就目前我电脑的状态来看,我既要打开浏览器,又要听歌,可能同时还登陆的有QQ,如果不使用虚拟内存4G的内存空间很快就会被耗尽,而一旦没有了内存空间,其他程序就无法加载了。虚拟内存的出现就是为了解决这个问...

2018-08-22 18:54:10 2201

转载 深入理解计算机系统----第八章异常控制流

原文链接 https://www.jianshu.com/p/c8a6c4154219目  录每次从一条指令过渡到另外一条指令的过程称为控制转移,这样的一个控制转移序列叫做控制流,如果每条指令都是相邻的,这样的过渡就是平滑序列。如果一条指令与另外一条指令不相邻,这样突发性的过渡称为异常,也就是我们这一章要学到的异常控制流(Exceptional Contro Flow)。学习这些知识将...

2018-08-22 18:52:08 2027 2

转载 深入理解计算机系统----第七章链接

原文链接 https://www.jianshu.com/p/7f27c0316355目  录链接是将各种不同文件的代码和数据部分收集(符号解析和重定位)起来并组合成一个单一文件的过程。本章节我们将要学习链接器工作的详细原理。通过对这一方面知识的学习,将有助于理解一些危险的编程错误、分离编译的过程、作用域的实现以及如何利用共享库等等。我们将静态链接和动态链接(加载时共享、运行时共享)两...

2018-08-22 18:49:36 996

转载 深入理解计算机系统----第六章存储器层次结构

 原文博客地址:https://www.jianshu.com/p/88c889e4fef3目 录在本章中,我们会先了解存储技术(SRAM\DRAM\ROM\旋转固态硬盘),描述这些存储器是如何被组织成层次结构的。接下来会谈到什么是拥有良好局部性的程序以及编写这样的程序需要注意的问题。然后我们开始探究本质,为什么说拥有良好局部性的程序会执行的更快。就要求我们要学习高速缓存,并教会大...

2018-08-21 22:47:20 1352

转载 深入理解计算机系统----第五章优化程序性能

转载地址https://www.jianshu.com/p/4586dc676807编写运行的快的程序有三个因素:①选择合适的算法和数据结构;②理解编译器的能力,使用有效的方式让编译器能进行优化;③对于运算量特别大的程序,可能还需要进行任务分解。在这一过程中可能还需要对程序的可读性和运行速度进行权衡。在阅读这一章节的过程中花费了大量的时间对我自己的自动办公软件进行了优化,算是学以致用。...

2018-08-21 20:40:37 1836

转载 深入理解计算机系统----第四章处理器体系结构

https://www.jianshu.com/p/15210eb3870d?open_source=weibo_search 原文地址目录学习事物是怎样工作的有其内在价值:处理器是如何工作的对于我们普通人来说一直是个秘密,我们将从零开始构建一个流水线处理器,为了实现这一处理器的软硬件,我们有大量的前提知识要学习,包括:指令系统、硬件设计背景知识(hcl)、以及流水线的通用原理。学习完...

2018-08-20 23:53:11 1835

转载 深入理解计算机系统----程序的机器级表示

转载地址 https://www.jianshu.com/p/c60a9c2131c3目  录精通细节是理解更深和更基本概念的先决条件,这一章节首先讲解了C代码、汇编代码与机器代码的关系,再次重申了汇编的承上启下的重要作用。接着从IA32的细节一步步讲起,如何存储数据、如何访问数据、如何完成运算、如何进行跳转,在了解了这些细节以后告诉你我们常用的分支语句、循环语句是怎么完成了。在如何调用函...

2018-08-19 20:38:11 474

转载 深入理解计算机系统----第二章 信息的表示和处理

1.信息存储系统将8位的块作为最小的可寻址存储器单位,机器级程序系统看成一个大的数组,然后通过地址来获得存储器中的这些块的内容。 数据在计算机中的存储都是用二进制,不过二进制不易表示,一般我们用十六进制来表示。如八位的十六进制范围为00~FF。 计算机的字长代表其整数数据的大小,同时也是系统絮凝地址空间最大大小。 C语言中对布尔代数的操作有提供几种方式,比如&(与),|(或),~...

2018-08-18 23:05:25 182

转载 深入理解计算机系统----第一张计算机系统漫游

转载地址 https://www.jianshu.com/p/f0fd1473344e 信息的表示信息就是位+上下文,系统中的所有信息,包括磁盘文件,程序,存储器中数据以及网路传输的数据,都是一串位表示的.区分不同数据对象的唯一方法就是判断其上下文.比如11011101这串二进制,可以表示221,在java的class文件里可能就代表一个JVM指令.程序的编译一个简单的C语言...

2018-08-03 11:23:26 288

原创 深入理解java虚拟机----第十三章线程安全与锁优化

这一部分和java并发编程实战中讲的很多东西一样,所以可以对照着看。13.1 概述对于这部分的主题“高效并发”来讲,首先需要保证并发的正确性,然后在此基础上实现高效。本章先从如何保证并发的正确性和如何实现线程安全讲起。13.2 线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个...

2018-08-01 21:30:36 281

原创 深入理解java虚拟机----java内存模型与线程

12.1  概述衡量一个服务性能的高低好坏,每秒事务处理数是最重要的指标之一,它 着一秒内服务端平均能响应的请求总数,而TPS的与程序的并发能力又有非常密切的关系。12.2 硬件的效率与一致性因为有缓存一致性,所以要有一些操作来保证安全。12.3 java内存模型java虚拟机规范中试图定义一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在...

2018-07-30 20:05:59 304

原创 深入理解java虚拟机----第十一章晚期优化

11.1 概述    在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码” (Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译...

2018-07-30 02:44:42 360

原创 深入理解java虚拟机----早期(编译期)优化

10.1 概述java的编译期可能指的以下三种:前端编译器:将*.java文件变成*.class文件,例如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ) JIT编译器(Just In Time Compiler):将字节码变成机器码,例如HotSpot VM的C1、C2编译器 AOT编译器(Ahead Of Time Compiler):直接把*.java文件编译...

2018-07-29 01:17:34 159

原创 深入理解java虚拟机----第八章虚拟机字节码执行引擎

8.1 概述执行引擎:输入字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果8.2 运行时栈帧结构栈帧是支持虚拟机进行方法调用和方法执行的数据结构。它存储在运行时数据区的虚拟机栈中。每一个方法的从开始到完成的过程,都对应了一个栈帧的入栈和出栈的过程。一个栈帧包含了:局部变量表,操作数栈,动态连接,方法返回地址。局部变量表和操作数栈在编译的时候,已经可以完全确定,并...

2018-07-26 12:33:35 256

原创 深入理解java虚拟机----第七章虚拟机类加载机制

7.1 概述虚拟机把描述类的数据从Class文件加载到内存,对数据进行校验,转换解析,初始化,最终形成可以被java虚拟机直接使用的java类型,这就是类加载机制。7.2 类的加载时机类加载时机类从被加载到内存中到卸载出内存,所经过的生命周期为:加载-验证-准备-解析-初始化-使用-卸载,其中验证-准备-解析三个部分统称为连接。解析阶段和其他的阶段不同,解析阶段可以在初始化之后执行...

2018-07-26 02:59:14 174

原创 深入理解java虚拟机----第六章 类文件结构

 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。6.1 概述由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。6.2 无关性的基石...

2018-07-25 19:59:08 265

原创 深入理解java虚拟机---第三章垃圾收集器与内存分配策略

3.1 概述哪些内存需要回收?什么时候回收?怎么回收?这里垃圾回收器关注的是Java堆和方法区的内存,程序计数器、虚拟栈、本地方法栈三个区域会随着线程而生,随着线程而灭, 不用管他。3.2对象已经死吗引用计数算法:它很难解决对象之间相互循环引用的问题可达性分析算法当一个对象到GC Roots没有任何引用链时,则证明对象时不可用的GC Roots的对象包括下面几种:...

2018-07-24 23:15:21 194

原创 深入理解java虚拟机----第二章java内存区域与内存溢出异常

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域:方法区、虚拟机栈、本地方法栈、堆、程序计数器程序计数器1.定义:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。2.它是线程独...

2018-07-24 00:59:07 217 1

原创 并发编程---java内存模型

一、什么是内存模型,为什么需要它Java内存模型(Java Memory Model)并发相关的安全发布,同步策略的规范、一致性等都来自于JMM。1 平台的内存模型在架构定义的内存模型中将告诉应用程序可以从内存系统中获得怎样的保证,此外还定义了一些特殊的指令(称为内存栅栏或栅栏),当需要共享数据时,这些指令就能实现额外的存储协调保证。JVM通过在适当的位置上插入内存栅栏来屏蔽在JVM与底层平台...

2018-07-13 23:07:17 102

原创 并发编程----原子变量与非阻塞同步机制

1,近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁来确保数据在并发访问中的一致性。2,与基于锁的方案相比,非阻塞算法在设计和实现上都要复杂得多,但它们在可伸缩性和活跃性上却拥有巨大的优势。3,锁的劣势  3.1,当有多个线程同时请求锁时,JVM需要借助操作系统的功能,将线程挂起并且在稍后恢复运行。当锁上存在着激烈的竞争时,调度开销...

2018-07-13 01:25:22 141

原创 并发编程---构建自定义的同步工具

1,状态依赖性的管理:  1.1,在单线程程序中,如果某一个基于状态的前提条件未得到满足,则这个条件将永远无法成真,可是,在并发程序中,基于状态的条件可能由于其他线程的操作而改变2,条件队列:  2.1,他使得一组线程能够通过某种方式来等待特定的条件变为真。传统队列的元素是一个一个数据,而条件队列中的元素是一个一个正在等待相关条件的线程  2.2,Object.wait会自动释放锁,并请求操作...

2018-07-08 19:29:02 115

原创 并发编程---显式锁

1,Lock与ReentrantLock  1.1,ReentrantLock不是替代内置加锁的方法,而是当内置加锁不适用时,作为一种可选的高级功能,如:可定时的、可轮询的,与可中断的锁获取操作,公平队列,以及非块结构的锁。一般应该优先使用synchronized。  1.2,Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,在Lock的实现中必须提供与内部锁相同的内存可见性...

2018-07-07 22:55:22 120

原创 并发编程---并发编程的测试

  并发程序中潜在错误的发生并不具有确定性,而是随机的。安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一、正确性测试重点:找出需要检查的不变性条件和后验条件1、对基本单元的测试——串行的执行 1 public class BoundedBufferTests {...

2018-07-03 20:18:10 165

原创 并发编程---性能与可伸缩性

线程的最主要目的是提高程序的运行性能,但性能的提升会导致复杂性的提升,又会导致安全性和活跃性的风险 一、对性能的思考提升性能意味着用更少的资源做更多地事情。要想通过并发来获得更好的性能,就要更有效地利用现有处理资源线程使用的额外的性能开销:线程之间的协调(例如加锁、触发信号以及内存同步等),增加的上下文切换,线程的创建和销毁,以及线程的调度等1、性能与可伸缩性(多块vs多少)性能通过服务时间、...

2018-06-25 23:35:13 201

原创 并发编程----避免活跃性的危险

安全性和活跃性之间存在某种制衡: 使用加锁机制来确保线程安全,但如果过度使用加锁,则可能导致锁顺序死锁(Lock-Ordering Deadlock)。同样,使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁(Resource Deadlock)10.1 死锁经典的“哲学家进餐”问题很好地描述了死锁状况。 5个哲学家围坐在一个圆桌上,每两个哲学家之间都有一只筷子,哲学...

2018-06-23 20:02:48 259

原创 并发编程---线程池的使用

一、在任务和执行策略之间隐性耦合Executor框架将任务的提交和它的执行策略解耦开来。虽然Executor框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略。依赖性任务:依赖其他同步任务的结果,使其不得不顺序执行,影响活跃性使用线程封闭的任务:在单线程的Executor中执行,任务可以不是线程安全的,但是一旦提交到线程池时,就会失去线程安全对响应时间敏感的任...

2018-06-21 23:12:32 174

原创 并发编程---取消与关闭

Java没有提供任何机制来安全地终止线程(虽然Thread.stop和suspend方法提供了这样的机制,但由于存在缺陷,因此应该避免使用中断:一种协作机制,能够使一个线程终止另一个线程的当前工作立即停止会使共享的数据结构处于不一致的状态,需要停止时,发出中断请求,被要求中断的线程处理完他当前的任务后会自己判断是否停下来 一、任务取消若外部代码能在某个操作正常完成之前将其置入“完成”状态,则还...

2018-06-20 22:08:43 166

原创 并发编程---任务执行

任务:通常是一些抽象的且离散的工作单元。大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一、在线程中执行任务任务的独立性:任务并不依赖于其他任务的状态,结果和边缘效应。独立的任务可以实现并行执行1、串行的执行任务所有的任务放在单个线程中串行执行,程序简单,安全性高,不涉及同步等情况,缺点也显而易见,无法提高吞吐量和响应速度,适合任务数量...

2018-06-19 21:39:44 177

原创 并发编程---- 基础构建模块

委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。一、同步容器类1、同步容器类的问题  同步容器类都是线程安全的,容器本身内置的复合操作能够保证原子性,但是当在其上进行客户端复合操作则需要额外加锁保护其安全性  由于同步容器类要遵守同步策略,即支持客户端加锁,但必须清楚加入同一个锁2、迭代器与ConcurrentModificationException  及时...

2018-06-18 12:06:53 187

转载 并发编程----对象的组合

4.转载地址https://blog.csdn.net/ahaha413525642/article/details/766170191 设计线程安全的类在设计线程安全类的过程中,需要包含下面三个基本要素 ①找出构成对象状态的所有量 ②找出约束状态变量的不变性条件 ③建立对象状态的并发访问管理策略要访问对象的状态,首先从对象的域开始。如果对象中所有的域都是基本类型的变量,那么这些域将构成对象的...

2018-06-16 21:08:00 235

原创 并发编程---对象的共享

一、可见性重排序:在没有同步的情况下,编译器、处理器可能对代码的执行顺序进行一些调整例如如下代码,由于没有使用同步机制,读线程可能看不见ready的修改,而一直循环下去;也可能由于重排序,看到了ready的修改number仍没修改而输出01、失效数据在缺少同步的程序中产生错误的结果的一种情况。造成程序的不确定性。2、非原子的64位操作即使是失效数据也是程序过去运行中产生的数据。但执行非原子的6...

2018-06-14 23:43:22 103

原创 并发编程----线程安全性

编写线程安全的代码的核心是要对状态访问操作进行管理,尤其是对共享的和可变的状态访问。 这里的对象的状态可以看成是存储在状态变量(例如实例或静态域)中的数据。1.什么是线程安全线程安全性定义中最核心的是概念是正确性。 正确性的含义是:某个类的行为和规范完全一致。在良好的规范中通常会定义各种不变性条件来约束对象,以及定义各种后验条件来描述对象操作的结果。 在正确性定义的基础上,线程安全性的定...

2018-06-12 20:45:09 141

空空如也

空空如也

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

TA关注的人

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