5 mic_saber

尚未进行身份认证

不能决定天气,但可以选择心情

等级
TA的排名 6w+

类加载器

类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”.类加载器在类层次划分、OSGi、热部署、代码加密等领域大放异彩.类与类加载器类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段.对于任意一个类...

2019-08-05 20:33:24

主内存与工作内存交互操作

主内存与工作内存lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变...

2019-08-02 15:50:28

happens-before

程序次序规则:在一个线程按照程序代码顺序,书写在前面的操作先行发生于书写在后面的操作。准确地说,应该是控制流顺序而不是程序代码顺序,因为要考虑分支、循环等结构。管程锁定规则:一个unlock操作先行发生于后面对同一个锁的lock操作。这里必须强调的是同一个锁,而“后面”是指时间上的先后顺序。volatile变量规则(VolatileVariableRule):对一个volatile变量的...

2019-08-02 15:41:40

GC算法

GC算法:标记-清除(Mark-Sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。不足有两个:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之...

2019-08-01 14:34:16

Java垃圾回收

判断对象存活:1.引用计数法2.可达性分析算法虚拟机栈中引用的对象 类静态属性的引用 常量的引用 Native方法引用:强-Objectobj=newObject();软-有用但并非必需的对象.在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收.如果这次回收还没有足够的内存,才会抛出内存溢出异常.弱-无论当...

2019-07-31 14:37:24

zookeeper

zookeeper的容错性:有服务器宕机,剩下个数必须大于宕机的个数才能正常使用,2n和2n-1的容忍度是一样的,所以3台只允许宕机1台,4台也只允许宕机一台,容错性是一样的。zookeeper本身就是一个分布式系统,半数节点以上存活,zookeeper正常服务为了保证高可用,通常以集群的方式数据基于内存,保证高吞吐量和低延迟读多写少的场景是高性能的临时节...

2019-07-29 15:20:34

Java 格式化 XML

项目中会有XML报文,格式化后便于查看importcom.sun.org.apache.xml.internal.serialize.OutputFormat;importcom.sun.org.apache.xml.internal.serialize.XMLSerializer;importorg.w3c.dom.Document;importorg.xml.sax.Inp...

2019-07-25 15:46:25

CQRS概述

CQRS(CommandQueryResponsibilitySegration)命令查询职责隔离Command包括增、删、改。Query只包含查它是一种读写分离思想的架构常用解决方案就是对数据库进行读写分离。让主数据库处理事务性的增、删、改操作,让从数据库处理查询操作,然后主从数据库之间进行同步。这只是从DB角度处理了读写分离,从业务或者系统层面上来说,读和写的逻辑仍然是...

2019-07-25 10:57:47

ScheduledExecutorService

scheduleAtFixedRate的jdk文档,有一句如下:如果任务的任何执行遇到异常,则后续执行被禁止。否则,任务将仅通过取消或终止执行者来终止。如果此任务的执行时间超过其周期,则后续执行可能会延迟,但不会同时执行。...

2019-07-19 16:34:20

Java日志体系概述

System.out.print大概十年前,主要是C/S模式(客户端+服务端模式),整个服务端项目都做在一个工程里,大家验证基本上用的前端就是alert,后台就是System.out.print,Linux上shell脚本里采用echo的方式输出日志。需求决定设计,写法轻巧需求简单这个方式基本就够用。JUL(java.util.logging)后续服务越来越...

2019-07-01 11:00:08

门面模式

Facade这个外观类为子系统们提供一个共同的对外接口Clients客户对象通过一个外观接口读写子系统中各接口的数据资源在以下情况下可以考虑使用外观模式:(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。(2)开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。(3)维护一个旧系统的时候,系统已经非常难以修改,...

2019-07-01 10:58:59

JVM常用命令

jps-q只输出进程号-m输出main函数的参数-l输出类的全名,或者jar包路径-v输出jvm启动参数配置jstat类装载、内存、垃圾收集、JIT编译等运行数据-class-gc-compiler-printcompilationjinfo实时地查看和调整虚拟机各项参数-sysprops-flagjmap生成堆快照-...

2019-05-21 10:45:30

Java虚拟机之七大垃圾回收器

GC分新生代和老年代,鸟瞰如下:Serial收集器单线程,垃圾收集时,必须暂停其他所有的工作线程Client模式下的默认新生代收集器.简单而高效(限定单个CPU,与其他收集器的单线程比)ParNew收集器Serial收集器的多线程版本除了Serial收集器外,目前只有它能与CMS收集器配合工作ParallelScavenge收集器吞吐量优先(Throughput)的...

2019-05-17 16:25:30

Java虚拟机之四大回收算法

标记-清除算法 最基础的收集算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了.它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的.主要不足有两个:效率问题,标记和清除两个过程的效率都不高;空间问题,标记清除之后会产生大量不连续的内存碎...

2019-05-17 16:18:47

CompletableFuture

Future有一定的局限性,无法实现某些场景的异步处理将两个异步计算合并为一个(这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果). 等待Future集合中的所有任务都完成. 仅等待Future集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同一个值),并返回它的结果. 通过编程方式完成一个Future任务的执行(即以手工设定异步操作结果的方式). 应对Futu...

2019-05-13 10:02:44

Java虚拟机之破坏双亲委派

破坏双亲委派:一个典型的例子便是JNDI服务,JNDI现在已经是Java的标准服务,它的代码由启动类加载器去加载,但JNDI的目的就是对资源进行集中管理和查找,它需要调用由独立厂商实现并部署在应用程序的ClassPath下的JNDI接口提供者(SPI,ServiceProviderInterface)的代码,但启动类加载器不可能“认识”这些代码啊!那该怎么办?为了解决这个问题,Java设...

2019-05-08 13:58:25

Java虚拟机之双亲委派模型

Java主要有两种类加载器:一种是启动类加载器(BootstrapClassLoader),这个类加载器使用C++语言实现[1],是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全都继承自抽象类java.lang.ClassLoader。从Java开发人员的角度来看,类加载器还可以划分得更细致一些,绝大部分Java程序都会使用到以下3种系...

2019-05-08 13:38:32

Java虚拟机之双亲委派

packagejava.lang;/****@ClassName:Object*@Description:TODO(这里用一句话描述这个类的作用)*@authorpangning@58.com*@date2019年5月7日下午6:24:18**/publicclassObject{}执行javacObject.jav...

2019-05-07 19:09:35

Java虚拟机之类加载机制

类的生命周期如下图:加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。注意,这里笔者写的是按部就班地“开始”,而不是按部就班地“进行”或“完成”,强调这点是因为这些阶段通常都是互相交叉地混合式进行的,通常会在...

2019-05-07 17:34:41

Java虚拟机之GC日志

阅读GC日志是解决JVM问题的基础33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680secs]100.667:[FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K...

2019-05-07 14:53:08

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。