6 努力就好其他的不管

尚未进行身份认证

我要认证

不积跬步无以至千里。这一秒不放弃,下一秒就有希望!坚持下去就会成功!

等级
TA的排名 8w+

java 设计模式

1、创建型模式 : 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者(生成器)模式、原型模式。2、结构型模式 : 共七种:适配器模式、装饰者(器)模式、代理模式、外观模式、桥接模式、组合模式、享元模式。3、行为型模式 : 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:设计模式的本质目的:使软件工...

2020-07-04 14:19:27

CountDownLatch 深度解析 由浅入深的了解高并发编程

AbstractQueuedSynchronizer,简称AQS。是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来,如常用的ReentrantLock、Semaphore、CountDownLatch等。基于AQS来构建同步器能带来许多好处。它不仅能极大地减少实现工作,而且也不必处理在多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。Doug Lea 大神在设计AQS时也充分考虑了可伸缩性,因此ja...

2020-06-03 23:03:32

JVM垃圾收集器基准报告 – Ionuț Baloșin 如何选择适合你的垃圾回收器

本文使用一组不同的模式描述了一系列Java虚拟机(JVM)垃圾收集器(GC)微基准及其结果。对于当前问题,我包括了AdoptOpenJDK 64位服务器VM版本13(内部版本13 + 33)中的所有垃圾收集器:串行GCParallel / ParallelOld GC(启动Java 7u4 ParallelGC和ParallelOld GC基本上是同一收集器)并发标记扫描CMS GC(目前不建议使用,它将根据JEP 363在Java 14版本中删除)垃圾优先G1 GCShenandoah

2020-05-30 18:24:36

深入理解java虚拟机—— 虚拟机 新型垃圾收集器 Shenandoah GC, ZGC

(1)、内存:在内存占用、吞吐量和延迟这三项指标里,延迟的重要性日益凸显,越发备受关注。其原因是随着计算机硬件的发展、性能的提升,我们越来越能容忍收集器多占用一点点内存;(2)、吞吐量:硬件性能增长,对软件系统的处理能力是有直接助益的,硬件的规格和性能越高,也有助于降低收集器运行时对应用程序的影响,换句话说,吞吐量会更高。(3)、延迟:对延迟则不是这样,硬件规格提升,准确地说是内存的扩大,对延迟反而会带来负面的效果,这点也是很符合直观思维的:虚拟机要回收完整的1TB的堆内存,毫无疑问要比回收1GB的

2020-05-30 17:04:49

深入理解java虚拟机—— 超详细虚拟机垃圾收集器原理,GC 垃圾收集器算法的深度解析,项目中如何选择合适的垃圾收集器

有7中收集器 -- Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1。从JVM区域结构看,可将这些区域划分为“静态内存”和“动态内存”两类。程序计数器、虚拟机栈、本地方法3个区域是“静态”的,因为这几个区域的内存分配和回收都具备确定性,都随着线程而生,随着线程而灭。但Java堆和方法区不一样,内存分配都存在不确定性,只有在程序处于运行期间才能知道会创建哪些对象,这部分内存和回收都是动态的,垃圾收集器所关注的是这

2020-05-30 01:10:04

深入理解java虚拟机—— 虚拟机 深扒垃圾回收器,再也不怕BAT面试

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。jvm中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的.为什么需要了解垃圾回收目前内存的动态分配与内存

2020-05-27 23:40:33

深入理解java虚拟机—— 一张万能的JVM虚拟机架构图看懂了虚拟机也就没什么了

辛辛苦苦树立了整整一个晚上,只要有价值就是值得的。希望大家留下宝贵意见。1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame)...

2020-05-26 23:11:33

深入理解java虚拟机——JAVA虚拟机程序计数器深度解析这一篇就够了

开篇介绍1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame) ------局部变量表 --...

2020-05-25 22:25:17

深入理解java虚拟机——堆区,学习java内存分布这一篇就够了

在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)但如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内

2020-05-24 17:11:47

ARM处理器 CISC(复杂指令集)与RISC(精简指令集)

博文背景:最近想学习一些树莓派的知识,便看了一本书《树莓派开始,玩转Linux》,在阅读此书的时候,顺便把其中不懂的知识重新梳理一些,算是作为自己的读书笔记了。 有感兴趣的同学,可以一起研究学习。毕竟软件搞久了,真是有点无聊了,接触一些硬件的知识,反而感觉新颖,真是别有一番滋味了。毕竟一切软件的载体都是这是硬件,了解一些底层说不定可以收获到意想不到的见解。你知道iOS、WindowsPhone、Android这3大平台的手机共通点是什么吗?除了都可以打电话、传简讯、安装App之外,...

2020-05-24 01:15:07

高并发编程 -- Java中CAS详解

在JDK 5之前Java语言主要依靠synchronized关键字保证同步,这会导致有锁。一、锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。二、volatile机制volatile到底如何保证可见性和禁止指令重排序的。“观察加入volatile关键字和没有加入volatile关.

2020-05-23 14:23:56

深入理解java虚拟机——java内存结构之虚拟机栈(JVM Stack)线程私有区域如何调度方法

虚拟机栈(JVM Stack)的介绍与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。  局部变量表中存储着方法的相关局部变量,包括各种基...

2020-05-20 22:51:39

深入理解java虚拟机—— java虚拟机内存结构虚拟机的内存模型架构解析

学习目标:由 JVM 引发的故障问题,无论在我们开发过程中还是生产环境下都是非常常见的,所有掌握好jvm,可以帮我本排查故障。 OutOfMemoryError(OOM) 内存溢出问题,Tomcat 容器中加载项目过多导致的 OOM 问题。 定位JVM哪里发生内存溢出了,为什么会内存溢出呢?如何监控 JVM运行。 JVM性能调优,JVM的内存区域划分,内存分配比例,并且可以通过JVM参数来反向定位代码问题,优化代码结构。 从JVM本质上了解线程并发安全的实现原理,以及与操作系统如何结合...

2020-05-19 23:15:42

深入理解java虚拟机——如何下载hotspot、jdk源码

为什么要学习jvm学习JVM对于一个Java程序员的好处大概可以概括为下8点:了解java的发展历程,以及计算机语言的历史发展进程。 垃圾回收算法与原理 类字节码规范与执行引擎 内存模型与线程 类加载机制 编译器 高效并发,线程安全与锁优化 性能监控以及jvm调优可以从java语言运行的底层来了解java的运行原理首先我们看一下如何下载jdk源码、hotspot源码1. 进入网址:,这个网http://hg.openjdk.java.net址下面列出了所...

2020-05-18 23:14:55

Tomcat 9 源码解析 -- 请求如何经过tomcat到达servlet

前面几篇文章讲解了Tomcat如何启动的,如何通过NIO,开启一个ServerSocket服务监听。最后用户通过浏览器就可以直接访问到想要的资源。下图中Connector部分:一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户。 Tomcat有两个典型的Connector: - 一个直接侦听来自browser的http请求 - 一个侦听来自其它WebServer的请求 Coyote Http/1.1 Connec.

2020-05-17 10:16:19

Tomcat 9 源码解析 -- 与SpringMvc如何结合在一起

Tomcat启动项目的方式下,如何加载SpringMvc 中的 DispatcherServletSpringBootServletInitializer类public abstract class SpringBootServletInitializer implements WebApplicationInitializer { protected Log logger; // Don't initialize early private boolean register...

2020-05-15 00:06:37

Tomcat 9 源码解析 -- tomcat框架设计(源码层次解析)

Tomcat 9 源码解析 -- tomcat框架设计前文已经从架构层次讲解了tomcat框架设计,以及tomcat使用,以及每个模块的作用,以及各功能模块之间的关系。下面是Tomcat 9 架构的一个启用的架构流程图:...

2020-05-12 23:26:57

Tomcat 9 源码解析 -- tomcat框架设计

Tomcat整体架构与重要组件1.Tomcat整体架构如果你浏览过Tomcat源码相关文章,你一定对此图不陌生.Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载servlet的,但,当使用一些MVC框架时,如spring MVC、strusts2,可能就找不出servlet在哪里?其实spring MVC框架就是一整个servlet,在web.xml中

2020-05-11 23:43:23

Tomcat 9 源码解析 -- 环境搭建

前言为什么要学习tomcat源码?以我个人来说,为什么我要学习tomcat源码,之前我看过一本书《tomcat源码解析》,讲的十分详细,但是那个是以tomcat 7 为基础进行讲解的。看到tomcat 7 --》 tomcat 9 变化还是不少的,所以自己想再重新了解一下 最新tomcat 源码的原理。1、 学习最新tomcat源码知识。2、了解tomcat运行原理浏览器 --》tomcat 然后再返回给 --》浏览器 的过程。3、了解代码设计模式。4、性能调优。因为项目..

2020-05-10 18:34:14

Tomcat 9 源码解析 -- Connector组件(2)

Tomcat 9 源码解析 -- Connector组件上文中已经分析到了processKey()方法。Poller #run() 在run方法最后调用了 processKey(sk, attachment); // 处理SelectKey/** processKey()这个方法主要通过调用processSocket()方法创建一个SocketProcessor,然后丢到Tomcat线程池中去执行。每个Endpoint都有自己的SocketProce...

2020-05-10 00:06:14

查看更多

勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。