自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDFS NameNode的高可用 面试版

NameNode HA架构图核心组件NameNode 主备切换主要由 ZKFailoverController、HealthMonitor 和 ActiveStandbyElector 这 3 个组件来协同实现:ZKFailoverController 作为 NameNode 机器上一个独立的进程启动 (在 hdfs 启动脚本之中的进程名为 zkfc),启动的时候会创建 HealthMonitor 和 ActiveStandbyElector 这两个主要的内部组件,ZKFailoverCon

2020-07-04 11:30:58 1857 2

原创 Java中init和clinit区别

init和clinit方法执行时机不同init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的constructor方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载的初始化阶段JVM会调用clinit方法。init和clinit方法执行目的不同init是instance实例构造器,对非静态变量解析初始化,而clinit是class类构造器对静态变量,静态代码块进行初始化。...

2020-07-04 20:00:24 362

原创 简述YARN中内存和CPU资源隔离机制 面试版

资源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。 资源调度:由resourcemanager完成 资源隔离:各个nodemanager完成对于CPU而言,它是一种“弹性”资源,使用量大小不会直接影响到应用程序的存亡,因此CPU的资源隔离方案采用了Linux Kernel提供的轻量级资源隔离技术Cgroup。YARN 中CPU被划分成虚拟CPU(CPU virtual Core),初衷是,考虑到不同节点的CPU性能可能不同,比如某个物理CPU的计算...

2020-07-04 11:21:57 547

原创 HDFS的租约机制 、租约管理 、租约恢复

常见问题写入过程客户端崩溃怎么处理(租约恢复)? NameNode中的租约管理器?租约概念我们知道HDFS文件是write-once-read-many,并且不支持客户端的并行写操作,那么这里就需要一种机制保证对HDFS文件的互斥操作。HDFS提供了租约(Lease)机制来实现这个功能,租约是Namenode给予租约持有者(LeaseHolder, 一般是客户端)在规定时间内拥有文件权限(写文件)的合同。租约申请流程在HDFS中,客户端写文件时需要先从租约管理器(LeaseMana.

2020-07-04 10:44:39 1349 3

原创 HDFS DataNode升级过程

升级需要重点考虑的几个问题DataStorage重要的功能就是管理磁盘存储空间的生命周期。升级是磁盘存储空间生命周期管理中最重要的一个环节,尤其是对于HDFS这样的分布式存储系统,升级需要重点考虑以下几个问题。■ 版本兼容性问题:不同版本之间兼容性的设计,高版本是否需要兼容低版本?不同组件之间,例如Datanode和Namenode之间的版本是否需要一致?■ 升级消耗的磁盘空间问题:我们知道Datanode最主要的功能是存储数据块,而这些数据块往往占用比较大的磁盘空间。如何做到既能保留原...

2020-07-04 10:37:24 436

原创 Java中如何破坏双亲委派模型

破坏双亲委派模型文中的双亲委派模型并不是一个强制性的约束模型,而是Java设计者推荐给开发者的类加载器实现方式。在Java的世界中大部分的类加载器都遵循这个模型,但是也有例外,目前为止,双亲委派模型主要出现过三次较大规模的“被破坏”情况。第一次:在双亲委派模型发布之前,即JDK1.2之前。为了兼容之前JDK版本中自定义类加载器的实现。(即没有按照双亲委派模型来设计)**解决办法:**把自己的类加载器逻辑写到findClass()方法中,在loadClass()方法的逻辑里如果父类加载失败,.

2020-07-03 11:24:23 866

原创 Java方法区垃圾回收

永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。如何判断⼀个常量是废弃常量?运行时常量池主要回收的是废弃的常量。那么,我们如何判断一个常量是废弃常量呢?假如在常量池中存在字符串”abc”,如果当前没有任何String对象引用该字符串常量的话,就说明常量”abc”就是废弃常量, 如果这时发生内存回收的话而且有必要的话,”abc”就会被系统清理出常量池。如何判断⼀个类是⽆⽤的类?判定一个常量是否是“废弃常量”比较简单,而要判定一个类是否是“无用的类”的条件则相对苛刻许多。类需要同时满足

2020-07-03 11:15:47 521

原创 Java静态常量池和运行时常量池

Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。运行时常量池相对于Class文件常量池的另外一个重要特征就是具备动态性,Java语言并不要求常量一定只有在编译期才能产生

2020-07-03 11:12:46 356

原创 Java静态分派 & 动态分派

静态类型:是变量声明时的类型实际类型:变量实例化时采用的类型静态分派​所有依赖静态类型来定位方法执行版本的分派动作,都称为静态分派,静态分派的最典型应用就是多态性中的方法重载。静态分派发生在编译阶段,因此确定静态分配的动作实际上不是由虚拟机来执行。动态分派​向上转型后调用子类覆写的方法便是一个很好地说明动态分派的例子。在判断执行父类中的方法还是子类中覆盖的方法时,如果用静态类型来判断,那么无论怎么进行向上转型,都只会调用父类中的方法,但实际情况是,根据对父类实例化的子类的不同,调用的是.

2020-07-03 11:09:37 146

原创 Java中的内存泄露(面试)

内存泄露概念内存泄露就是堆内存中不再使用的对象在垃圾回收期无法从被回收。因为这些对象仍然存在者引用,所以垃圾收集器不会回收。内存泄露的症状:应用程序长时间连续运行时性能严重下降;应用程序中的OutOfMemoryError堆错误;自发且奇怪的应用程序崩溃;Java中内存泄露类型static字段引起的内存泄露大量使用static字段会潜在的导致内存泄露,在Java中,静态字段通常拥有与整个应用程序相匹配的生命周期。解决办法:最大限度的减少静态变量的使用;单例模式时,依赖于延迟加载.

2020-07-03 10:58:56 261

原创 JVM进程启动会启动哪些线程

每当使用java命令执行一个带main方法的类时,就会启动JVM(应用程序),实际上就是在操作系统中启动一个JVM进程,JVM启动时,必然会创建以下5个线程:main:主线程,用于执行我们编写的 java程序的main方法。Reference Handler :它主要用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收问题。Finalizer:JVM在垃圾收集时会将失去引用的对象包装成 Finalizer对象(Reference的实现),并放入ReferenceQueue,由Final

2020-07-03 10:45:19 567

原创 Java对象创建的过程(面试)

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。为什么对象内存大小在类加载完成之后可确定?https://www.zhihu.com/question/63522204内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),如...

2020-07-03 10:33:13 1763

原创 HotSpot逃逸分析

HotSpot逃逸分析逃逸分析并不是直接的优化手段,它是通过动态分析对象的作用域,为其它优化手段如栈上分配、标量替换和同步消除等提供依据,发生逃逸行为的情况有两种:方法逃逸、线程逃逸。方法逃逸:当一个对象在方法中定义之后,作为参数传递到其它方法中; 线程逃逸:如类变量或实例变量,被其它线程访问到;如果不存在逃逸行为,则可以对该对象进行如下优化:同步消除、标量替换和栈上分配。同步消除线程同步本身比较耗时,如果确定一个对象不会逃逸出线程,无法被其它线程访问到,那该对象的读写就不会存在竞争,则可以

2020-07-03 09:53:17 368 1

原创 如何减少GC出现的次数(GC优化)

对象不用时最好显式置为 Null一般而言,为 Null 的对象都会被作为垃圾处理,所以将不用的对象显式地设为 Null,有利于 GC 收集器判定垃圾,从而提高了 GC 的效率。尽量少用 System.gc()此函数建议JVM 进行主GC,虽然只是建议而非一定,但很多情况下它会触发主 GC,从而增加主 GC 的频率,也即增加了间歇性停顿的次数。尽量少用静态变量 静态变量属于全局变量,不会被 GC 回收,它们会一直占用内存。尽量使用 StringBuffer, 而不用String...

2020-07-03 09:44:16 3916

原创 JDK1.8 方法区的变化

方法区的垃圾回收主要分为两部分:常量池中废弃的常量和不再使用的类JDK1.7 vs JDK1.8在JDK1.7及以前,HotSpot虚拟机将Java类信息、常量池、静态变量、即时编译器编译后的代码等数据,存储在Perm(永久带)里(对于其他虚拟机如BEA JRockit、IBM J9等是不存在永久带概念的),类的元数据和静态变量在类加载的时候被分配到Perm里,当常量池回收或者类被卸载的时候,垃圾收集器会回收这一部分内存,但效果不太理想。 JDK 1.8中则把永久代给完全删除了,取而代之的是Me

2020-07-03 09:40:29 966 1

原创 1、线程与进程区别

1、线程与进程区别(1)拥有资源 进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。(2) 调度 线程是是CPU调度和分派的基本单位;(3) 系统开销 进程创建、撤销、上下文切换时的开销要大于线程...

2020-07-02 09:22:29 245

空空如也

空空如也

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

TA关注的人

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