java
文章平均质量分 78
Oeljeklaus
python开发,大数据,图数据,数据分析
展开
-
JVM之JIT技术(四):锁粗化
点击上方蓝字,记得关注我们!JVM之JIT技术(四):锁粗化引言在上面的三篇文章中,我们首先解释了JIT的历史,JIT技术:内联、逃逸分析、锁消除等。但是,这仅仅是适用于单线程,如果需要同步,这个这些就不适合了,现在我们来介绍适用于多线程的JIT技术:锁粗化。01在上一篇文章中,锁消除已经简单的介绍。但是并不是所有的情况可以使用锁消除,这时我们需要使用锁粗化...原创 2019-03-22 22:17:53 · 1058 阅读 · 0 评论 -
设计模式(二)工厂方法模式
设计模式(二):工厂方法模式Github关于23设计模式的讲解文件已经放在我的GitHub上,欢迎大家Fork和Star模式动机 在简单工厂模式中,如果在原来的实现的基础上,我们再增加一个产品类的实现,那么我们必须在原来的工厂方法里修改工厂类的源代码.那么有没有更好的方法,可以不修改工厂类的源代码而进行动态的可扩展呢?今天我们将要介绍的设计模式之工厂方法模式,就是这样的一...原创 2018-07-14 14:00:01 · 380 阅读 · 0 评论 -
Javac原理剖析
Javac原理剖析Javac是什么? Javac是一种编译器,能将一种语言规范转化为另一种语言规范。Javac的任务就是将Java源代码语言转化成JVM能够识别的一种语言,然后由J将JVM语言转化成当前这个机器能够识别的机器语言。 Javac的任务就是将Java源码成Java字节码,也就是JVM能够识别二进制码。从表面上看就是上面的部分将.java文件转成.clas...原创 2018-07-11 15:06:55 · 2641 阅读 · 2 评论 -
秒杀系统的设计与实现
秒杀系统使用的知识点redis高并发锁机制秒杀系统遇到的问题如何限制一个IP使用抢购软件?秒杀的超卖问题?秒杀系统的简单方案处理有10件商品要秒杀,可以放到缓存中,读写时不要加锁。 当并发量大的时候,可能有25个人秒杀成功,这样后面的就可以直接抛秒杀结束的静态页面。进去的25个人中有15个人是不可能获得商品的。所以可以根据进入的先后顺序只能前10个人购买成功。后面15个人就抛商品已秒杀结束。秒杀系...原创 2018-06-19 22:29:46 · 869 阅读 · 0 评论 -
Java命令学习系列(一)——Jps
位置我们知道,很多Java命令都在jdk的JAVA_HOME/bin/目录下面,jps也不例外,他就在bin目录下,所以,他是java自带的一个命令。功能jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。原理j...转载 2018-06-30 21:35:02 · 371 阅读 · 0 评论 -
第十章 Executor框架
第十章 Executor框架线程的工作单位是Runnable和Callable,执行机制由Executor框架提供。10.1Executor框架简介10.1.1Executor框架的两级调度在上层,Java多线程程序通常把应用分解成为若干任务,然后使用用户级的调度器(Executor框架)将这些任务映射成为固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器上。...原创 2018-06-13 08:59:31 · 906 阅读 · 0 评论 -
第九章 java中的线程池
第九章 java中的线程池线程池的好处:1.降低资源消耗2.提高响应数独3.提高线程的可管理性9.1线程池实现原理1.线程池判断核心线程池里的线程是否都在执行任务。如果不是,那就创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。2.线程池来判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储子啊这个工作队列里。如果工...原创 2018-06-12 16:34:45 · 841 阅读 · 0 评论 -
第八章 Java中的并发工具类
第八章 Java中的并发工具类8.1等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。类似于Thread.join()package cn.edu.hust.atomic;public class CountDownLatchTest { public static void main(String[...原创 2018-06-12 16:31:43 · 803 阅读 · 0 评论 -
第七章 Java中的13个原子操作类
第七章 Java中的13个原子操作类4中类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性。主要使用Unsafe实现的包状态类。7.1原子更新基本类型AtomicBoolean:原子更新布尔类型AtomicInteger:原子更新整型AtomicLong:原子更新长整型以AtomicInteger进行讲解:int addAndGet...原创 2018-06-12 16:30:13 · 927 阅读 · 0 评论 -
第六章 Java并发容器和框架
第六章 Java并发容器和框架6.1ConcurrentHashMap的实现原理和使用ConcurrentHashMap式线程安全且高效的HashMap。6.1.1为什么要选择ConcurrentHashMap1.线程不安全的HashMap2.效率低下的HashTableHashTable使用synchronized来保证线程的安全,在线程激烈的情况下,Hashta...原创 2018-06-12 16:28:12 · 916 阅读 · 0 评论 -
第五章 Java中的锁
第五章 Java中的锁5.1Lock接口获取锁后,发生过异常,锁不会释放。锁与synchronized关键字的对比:Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的。5.2队列同步器AbstractQueuedSynchronizer同步器是构建锁和其他同步组件的基础框架。同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽...原创 2018-06-12 16:23:59 · 831 阅读 · 0 评论 -
第三章 Java内存模型
第三章 Java内存模型3.1Java内存模型的基础3.1.1并发编程模型的两个关键问题线程之间的通信机制有两种:共享内存和消息传递共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。消息传递:线程之间没有公共状态,线程之间必须通过发送消息显示进行通信。Java的并发是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完...原创 2018-06-12 16:13:55 · 917 阅读 · 0 评论 -
Java性能调优(四):GC策略和程序调优
GC策略的优化 选择不同的GC收集器,会有不同的效果,CMS GC多数动作是和应用并发进行的,确实可以减少GC动作给应用造成的暂停。 对于web应用而言,在G1还不够成熟的情况下,CMS GC是不错的选择。程序调优CPU消耗严重的解决方法1.CPU us高的解决方法 CPU us高的原因主要是执行程序无任何挂起动作,且一直执行,导致CPU没有机会去调度执行其他的线程,导致线程饿死的现象。 以上图片...原创 2018-06-12 15:58:50 · 2043 阅读 · 0 评论 -
Java性能调优(三):程序执行和JVM调优
程序执行慢情况分析 有些情况是资源消耗不多,但程序执行仍然慢,这种现象多出现访问量不是非常大的情况下,造成这种原因有三种:锁竞争激烈 锁竞争激烈直接会造成程序执行慢。例如一个典型的例子是数据库连接池,通常数据库连接池提供的连接数是有限的。未充分使用硬件资源 可以优化程序,充分发挥硬件资源的座椅哦难过,此时可进行一定的优化充分使用硬件资源,提升程序的执行速度。数据量的增长 数据量增长通常也是造成程序...原创 2018-06-12 15:56:15 · 1297 阅读 · 0 评论 -
Java性能调优(二):IO和内存分析
文件IO消耗分析 Linux在操作文件的时候,先将文件放入文件缓存,直到内存不足或者进程使用。这是一种提升IO速度的方式。1.pidstat KB_rd/s表示每秒读,KB_wr/s每秒写2.iostat 查看历史IO网络IO分析 使用命令 sar -n FULL 1 2内存消耗分析 JVM内存消耗过多会导致GC喜欢 ii 次难过频繁,CPU消耗增加,应用线程的执行速度严...原创 2018-06-12 15:54:25 · 2660 阅读 · 0 评论 -
Java虚拟机类加载机制
到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。123456789101112131415161718192021222324252627282930313233343536373839404142public class S...转载 2018-05-24 14:43:51 · 1235 阅读 · 0 评论 -
设计模式(三)抽象工厂模式
设计模式(三):抽象工厂模式GithubGithub 关于23设计模式的讲解文件已经放在我的GitHub上,欢迎大家Fork和Star模式动机 在工厂方法模式中,每一个产品对应于每一个具体的工厂方法。但是一般的情况下,我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。产品等级结构:产品等级结构业绩回升产品的继承结构,例如一个抽象类是数据库,数据库有MySQ...原创 2018-07-14 15:15:21 · 297 阅读 · 0 评论 -
设计模式(四)建造者模式
设计模式(四)建造者模式模式动机 在现实生活中,有很多复杂的对象,拥有很多的组件,例如手机,有显示屏、CPU等;我们使用的时候是一起使用的,但是我们基本上不知道这些部件的实现细节,这时我们可以通过建造者模式对其进行设计和描述,建造者哦是将部件和其组装过程分开,一步一步创建一个复杂的对象,用户只需要指定复杂的类型就可以得到该对象,而无须知道其内部的具体构造细节。 在软件开...原创 2018-07-15 21:16:25 · 386 阅读 · 0 评论 -
死磕Java之hashcode与equals方法
死磕Java之hashcode与equals方法hashCode方法与equals方法来源于Java最基本的类Object,这两个方法常用于自定义类在Java集合类中,类对象的判断等;掌握理解该方法是程序员必备技能。01hashCode 首先让我们先来了解hash的概念。 hash:就是把任意长度的输入(又叫做预映射pre-image)通过散...原创 2019-02-22 08:41:54 · 424 阅读 · 0 评论 -
JVM之JIT技术(三):逃逸分析,锁消除
点击上方蓝字,记得关注我们!JVM之JIT技术(三):逃逸分析,锁消除引言逃逸分析和锁消除是常用的JIT技术,锁消除常常用来消除不必要的锁。01在上一节中,我们已经分析了JIT的较为简单的技术:内联。这里这一节,我们将会讲解逃逸分析和锁消除。 JVM通过域分析来确定是否一个对象能够从现在方法或者线程的域逃出出去,这被称为逃逸分析。...原创 2019-03-22 21:46:46 · 1107 阅读 · 0 评论 -
JVM之JIT技术(二):内联
点击上方蓝字,记得关注我们!JVM之JIT技术(二):内联引言在JIT技术上,有很多种优化技术,其中内联是一种非常常见的技术,在本文中将会详细的介绍这技术,同时使用数字对比,更加形象的突出内联的运行时间。01在上一篇文章《JVM之JIT优化技术(一)》中,我们使用了大量的篇幅讲解了JIT技术的由来和一些简单的优化步骤,以及优化例子,本文将详细讲解JIT...原创 2019-03-22 21:15:41 · 1059 阅读 · 0 评论 -
数据结构之布隆过滤器
数据结构之布隆过滤器01引言您可能从未听说过Bloom Filter,但是这个巧妙的算法在Google的BigTable数据库中使用,以节省时间,无需搜索不存在的数据。在编程中,也许在生活中,有一些众所周知的权衡。您通常可以将空间交换一段时间,因为您可以通过更多的存储空间来解决问题,您可以更快地运行空间。还有一个鲜为人知的权衡,它更为复杂。一般来说,您可以确定时...原创 2019-03-16 10:18:27 · 1113 阅读 · 0 评论 -
Java中Vector的操作一定是线程安全的嘛?
Java中Vector的操作一定是线程安全的嘛?Java中Vector类是JDK1.2加入的遗留集合,其内部的方法主要是通过synchronized关键字进行封装,保证这个类是一个线程安全的类,那么是不是vector的操作一定是线程安全的呢?本文将带你分析不一样的vector。01vector简介首先,我们使用简单的描述vector的重要方法。这里是...原创 2019-03-15 19:09:25 · 5921 阅读 · 0 评论 -
Java并发之Monitor实现
Java并发之Monitor实现可能在synchronized关键字的实现原理中,你已经知道了它的底层是使用Monitor的相关指令来实现的,但是还不清楚Monitor的具体细节。本文将让你彻底Monitor的底层实现原理01简介本文主要翻译Monitors – The Basic Idea of Java Synchronization国外大神的文...原创 2019-03-09 15:30:02 · 3239 阅读 · 1 评论 -
JVM之垃圾回收算法
JVM之垃圾回收算法相比如C++,Java程序的一大优势是不需要程序员手动释放分配的内容,主要由Java虚拟机管理内存的分配和释放,但是并不意味着我们不需要掌握垃圾回收算法。本文将会带你探索Java虚拟机中主要的垃圾回收算法。01标记-清除算法标记-清除算法是最基本的算法,也会受比较容易实现的垃圾收集算法。这个算法主要分为标记和清除两个阶段...原创 2019-03-09 09:31:43 · 304 阅读 · 0 评论 -
JVM之类加载机制
JVM之类加载机制在一般的强类型语言中,都有预处理、编译、汇编和链接过程,Java一般是将Java编译成class文件后,Java虚拟机需要将class文件在内存后到底发生了什么呢?本文将会带你了解Java的类加载过程01类加载时机类才能够被加载到虚拟机内存中开始,到卸载出内存位置,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和...原创 2019-03-08 21:46:52 · 210 阅读 · 0 评论 -
Java并发之线程
Java并发之线程讨论并发,大多数都与线程脱不开关系。本文将对从线程的特点、多线程优势以及线程状态和实现等几个方面讲解Java线程,同时讲解Java线程在虚拟机中如何实现。01线程的特点和实现说到线程,首先要谈到进程;进程是操作系统资源分配和调度的基本单位,即运行起来的程序。毕竟进程是粗粒度的单位,为了更好地量化程序,引入了线程的概念。...原创 2019-03-08 20:45:20 · 232 阅读 · 0 评论 -
Java并发之synchronized关键字
Java并发之synchronized关键字synchronized是Java的重量级锁,本文将从synchronized的使用方式,底层原理,特点和适用场景讲解。让你彻彻底底明白Java中的synchronized。01使用方式先来看一下synchronized关键字的同步基础:Java中的每一个对象都可以作为锁。为什么对象可以作为锁呢?这里...原创 2019-03-03 15:58:42 · 279 阅读 · 0 评论 -
死磕Java之泛型(一)
死磕Java之泛型(一)一般的类和方法,只能使用具体的类型;要么是基本类型,要么是自定义的类,如果需要编写可以应用于多种类型的代码,这种限制就降低了代码的可用性,当然你会想到重载,但是对于类呢,这就需要引入泛型了。01泛型的基本概念 泛型,从字面上理解就是适用于很多很多的类型,即参数化类型。从Java SE5开始,Sun公司就引入了泛型的概念。引入泛型的初衷是,希...原创 2019-02-27 10:18:45 · 264 阅读 · 0 评论 -
JVM运行时数据区域
JVM运行时数据区域Java虚拟机在运行Java程序的过程中会把它所管理的内存划分为多个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。本文将带你理解JVM的各大数据区域以及用途。01程序计数器程序计数器是线程私有的,它的主要作用是记录当前线程执行到了那一条指令。线程有可能因为时间片轮转的关系导致挂起,或者是线程上下文切换,这个时...原创 2019-03-02 21:51:43 · 218 阅读 · 0 评论 -
Java并发之volatile关键字
Java并发之volatile关键字volatile关键字可以说是Java中的轻量级锁,实现Java的同步组件中有发挥了具体的作用。尽管volatile是非常的使用,然而它的原理总是让人困惑。换句话说,我们需要理解它的底层原理是不可或缺的。01volatile定义和原理Java语言为了允许线程访问共享变量。一般来说,为了确保共享变量的一致性和实...原创 2019-03-02 20:45:37 · 592 阅读 · 0 评论 -
死磕Java之JDK 1.6HashMap
死磕Java之JDK 1.6HashMapHashMap是常用的按照键值对存储的集合类,内部源码有很多值得思考和学习的地方。你知道为什么HashMap不安全吗?为什么HashMap的初始容量为16吗?HashMap的结构时怎么样的吗?本文将带你揭开HashMap的神秘面纱。01概述HashMap是基于哈希表实现的Map接口。这样的实现允许所有的Map...原创 2019-03-01 09:50:31 · 1020 阅读 · 0 评论 -
死磕Java之序列化与反序列化
死磕Java之序列化与反序列化当创建对象时,它就一直存在,但是在程序终止之后,无论如何它不会存在。如果现在的需求是当程序终止后,需要将信息保存起来,这就需要Java序列化了。01序列化的引入Java序列化的引入主要基于两方面的考虑: 1.为了支持Java的RMI(远程过程调用),它使存活于其他计算机上的对象使用起来就像存在于本机计算机一样。 2.对于...原创 2019-02-24 13:29:26 · 294 阅读 · 0 评论 -
死磕Java之NIO与IO
死磕Java之NIO与IO 当学习Java NIO与IO时,你是否会有这样的想法:什么时候使用NIO,什么使用IO呢?本篇文章将会分析两者的不同,它们的用例,以及和影响代码的设计。01NIO与IO的区别 下面这张表总结了Java NIO和IO的主要区别,接下来我将从下表中的不同更加细致的讲解。IO NIO Stream oriented ...原创 2019-02-23 15:10:34 · 4818 阅读 · 1 评论 -
死磕Java之泛型(二)
死磕Java之泛型(二)在<<死磕Java之泛型(一)>>中,已经简单的讲解了泛型的概念,泛型原理以及泛型边界和通配符。本文将讲解泛型的高级用法和弥补泛型带来的缺陷。01泛型带来的问题Java引入泛型的目的是呈现编译时多态。尽管泛型的引入,给编码带来了很多便利之处,但是往往带来很多困惑。泛型主要的限制之一是,不能使用基本类型,...原创 2019-02-27 21:24:50 · 294 阅读 · 0 评论 -
理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。很明显,这里有一些小陷阱,这也是我们写这篇文章的原因。12345678910111213141516171819202...转载 2018-05-24 11:48:43 · 1239 阅读 · 0 评论 -
Java性能调优(一):调优的流程和程序性能分析
Java性能调优随着应用的数据量不断的增加,系统的反应一般会越来越慢,这个时候我们就需要性能调优。性能调优的步骤如下:寻找性能瓶颈 通常性能瓶颈的表象是资源消耗过多、外部处理系统的不足,或者资源消耗不多,但是程序的响应速度却达不到要求。下面的分析针对于Linux。CPU消耗分析 CPU主要用于中断、内核以及用户进程的处理;优先级为中断、内核和用户进程。我们首先有了解3个概念。1.上下文切换 线程从...原创 2018-06-11 19:31:41 · 9117 阅读 · 2 评论 -
5.Java集合总结系列:常见集合类的使用(List/Set/Map)
总结:Set、List 和 Map 可以看做集合的三大类。List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。原创 2017-03-29 21:17:08 · 1371 阅读 · 0 评论 -
4.Java集合总结系列:Map接口及其实现
一、Map接口Map集合的特点是:通过key值找到对应的value值,key值是唯一的,value可以重复。Map中的元素是无序的,但是也有实现了排序的Map实现类,如:TreeMap。上面Map接口提供的方法大致可以分为下面几种:1、put/putAll/remove/clear 增加删除 get/values 获取值2、containKey/c原创 2017-03-29 21:15:59 · 1300 阅读 · 0 评论 -
3.Java集合总结系列:Set接口及其实现
一、Set接口Set 接口与 List 接口相比没有那么多操作方法,比如:1、List 接口能直接设置或获取某个元素的值,而Set接口不能。2、List 接口能直接在指定位置删除、增加元素,而Set接口不能。3、List 接口有 listIterator 方法,可以获得 ListIterator 对象,而 Set 接口不能。Set 只能通过 iterator 迭代的原创 2017-03-29 21:14:57 · 1289 阅读 · 0 评论
分享