- 博客(17)
- 收藏
- 关注
原创 ClassLoader类加载器 之 双亲委派
1、双亲委派是什么?如果一个类加载器收到了类加载的请求,他首先会从自己缓存里查找是否之前加载过这个class,加载过直接返回,没加载过的话他不会自己亲自去加载,他会把这个请求委派给父类加载器去完成,每一层都是如此,类似递归,一直递归到顶层父类,也就是Bootstrap ClassLoader ,只要加载完成就会返回结果,如果顶层父类加载器无法加载此class,则会返回去交给子类加载器去尝试加载,若最底层的子类加载器也没找到,则会抛出ClassNotFoundException 。2、为什么要有双亲委
2021-03-24 23:41:23
107
原创 ClassLoader类加载器 之 类加载器种类
上图:1、启动类加载器(Bootstrap ClassLoader)最顶层类加载器,他的父类加载器是个null,也就是没有父类加载器。负责加载jvm的核心类库,比如java.lang.* 等,从系统属性中的sun.boot.class.path 所指定的目录中加载类库。他的具体实现由Java虚拟机底层C++代码实现。2、扩展类加载器(Extension ClassLoader)父类加载器是Bootstrap ClassLoader。从java.ext.dirs 系统属性所指定的目录中加载
2021-03-24 23:26:03
266
原创 ClassLoader类加载器 之 类加载过程
一个class文件如何从硬盘到内存,开始执行,首先来看一张图,依次描述。1、加载将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class 对象用来封装类在方法区内的数据结构作为这个类的各种数据的访问入口。2、连接2.1、验证主要是为了确保class文件中的字节流包含的信息是否符合当前JVM的要求,且不会危害JVM自身安全,比如校验文件格式、是否是cafe baby魔数、字节码验证等等。2.2、准备..
2021-03-24 22:51:45
127
原创 01-Java设计模式-单例模式
Singleton-单例模式单例顾名思义就是单个实例,保证在内存中只有一个实例。使用场景用在只需要有一个实例存在的时候,不想让别人在 new 一个实例出来的时候。现在单例的写法玩的越来越花哨了,各种写法,本次介绍一下常用几种方式及优缺点。1、饿汉式特点: JVM保证线程安全优点:写法比较简单,推荐使用缺点:不管是否用到,类装载时就完成实例化了public clas...
2020-03-27 18:17:21
108
原创 23种设计模式
Java中有23中设计模式,在日常工作和学习中能多掌握几种就掌握集中,并不是要全部都会的,毕竟常用的就那么几种。本篇只把这23种设计模式及分类列出来,在后面会以一种设计模式一篇博客的方式发布,一是为了更清楚的了解每种设计模式,二是为了阅读者能在一篇博客中专注在一种设计模式的理解和学习。想了解设计模式的,请大家持续关注。设计模式可以理解成分了三大类:创建型模式工厂方法模式 抽...
2020-03-06 10:26:45
136
1
原创 Java Integer 为什么不推荐使用 ==
所有整型包装类对象之间的比较全部使用equals方法比较。对于 Integer var = ? 在 -128 至 127 范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用 == 进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,所以推荐使用equals方法进行判断。举个栗子:...
2020-03-02 13:23:13
2043
原创 Java 单例模式实现方式-续
在之前一篇博客中提到过Java单例模式的实现,Java 单例模式实现方式,这次主要分享两个懒汉式线程安全的单例,在面试过程中也会经常被拿来当笔试题,例如写一个线程安全的单例模式。这时候我们肯定想到的是饿汉式,没错,饿汉式是线程安全的,如果你也能写出懒汉式的线程安全的单例是不是更好一些呢。懒汉式-线程安全public class Singleton { private sta...
2019-04-20 10:31:28
238
原创 浅谈Java的System.gc()实现
我们都知道System.gc()用于调用垃圾收集器。很久之前我一直认为执行System.gc()之后,虚拟机会立刻垃圾回收。抱歉,我理解错了。直到看完System.gc()的源码之后才搞清楚,执行System.gc()函数的作用只是提醒或告诉虚拟机,希望进行一次垃圾回收。至于什么时候进行回收还是取决于虚拟机,而且也不能保证一定进行回收(如果-XX:+DisableExplicitGC设...
2019-04-20 09:35:35
35455
2
原创 Linux srpm包下载安装
在Linux系统中rpm包是二进制包,直接安装;srpm包是源码包,可以生成rpm包。拉去srpm包:yumdownloader --source icedtea-web解压srpm包:rpm -ivh icedtea-web-1.7.1-9.fc29.src.rpm解压完成以后,会在当前用户目录生成一个rpmbuild目录。编译生成rpm和srpm包:rpmbu...
2019-04-01 17:54:41
822
原创 Java 单例模式实现方式
无论程序如何运行,采用单例模式的类,保证类的对象在内存中唯一。1、饿汉式:因为饿,所以要立即吃饭,在定义类的静态私有变量同时进行实例化,线程安全。public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton(){} ...
2019-03-28 20:01:45
112
原创 经典递归算法
程序调用自身的编程技巧称为递归。今天分享几个经典递归算法,也算是做一个整理记录。 /** * 3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个 * 月的兔子总数为多少? */ public static int rabbit(int x){ if (x == 1 || x ==2) { return 1;...
2019-03-28 19:26:51
1479
原创 Linux系统压缩包的压缩和解压总结
tar包:先介绍以下 tar 命令的一些常用参数。-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件以上五个参数是基本参数,无论压缩或者解压都会用到其中一个(只能用一个)。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出以上五个命令是可选参数。...
2019-03-28 17:57:36
196
原创 Java 垃圾回收算法
java语言引入了内存回收机制,对于C++程序员内存管理的问题迎刃而解。为什么需要进行垃圾回收,如果不回收内存早晚回耗尽。既然要回收,哪些内存是需要回收的,什么算法判断是否需要回收,就成了关键问题。首先来看一下判断对象是否存活的算法,因为垃圾回收只回收非存活的对象,所以要先判断出对象是否存活。1、引用计数算法 堆中每个对象实例都有一个引用计数,当一个对象被创建时,就将该对象实例分配...
2018-11-07 17:14:36
290
原创 Centos7编译并整合OpenJDK8和OpenJFX
OpenJDK8并不像OracleJDK8那样包含OpenJFX,如果让OpenJDK8也能使用OpenJFX需要自己手动编译一下:1、官网下载OpenJDK8源码: 1.1、本人使用hg cloud 下载的,带有版本信息,在用hg update 选择适合的版本,但是hg update只切换当前目录到选择的版本,为了省事,可以使用 sh common/bin/hgforest.sh upda...
2018-03-05 14:23:55
5465
原创 docker镜像到docker hub
申请docker hub 帐号 打开 docker hub官网:https://hub.docker.com 进行注册邮件激活后登录docker hub 点击 Create --> Create repository 创建一个仓库。仓库名称:huangxg20171010/fedora21-basehuangxg20171010是帐号,fedora21-base在doc
2017-11-30 14:27:31
2537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人