
java开发
文章平均质量分 87
坐槐不乱
Android开发,熟悉跨境电商app开发流程,包括facebook广告、firebase广告分析、GoogleAnalysis相关的技术栈,懂一点spring+vue技术栈。
简书:https://www.jianshu.com/u/ddc5b6a1cc87
掘金:https://juejin.im/user/575ca92a6be3ff0069571a8b/posts
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM系列-深入理解ClassLoader类加载器
1、类加载器:1.1、基本概念:【作用于类加载的加载阶段】当你写完了一个*.java文件的时候,编译器会把他编译成一个由字节码组成的class文件,当程序运行时,JVM会首先寻找包含有main()方法的类,把这个class文件中的字节码数据读入进来,转化成JVM中运行时对应的Class对象。执行这个动作的,就叫类加载器。类的加载就是虚拟机通过一个类的全限定名来获取描述此类的二进制字节流,而完成这个加载动作的就是类加载器。类加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这原创 2021-03-31 18:43:53 · 216 阅读 · 0 评论 -
JVM系列-类加载流程
1、基本介绍:类的加载指的是将类的.class文件【编译器将java文件编译成class文件】中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。JVM有预加载功能:类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被原创 2021-03-31 15:55:22 · 158 阅读 · 0 评论 -
JVM系列-JVM内存区域划分
1、基本介绍:运行时数据区通常包括这5个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。2、程序计数器:【PC寄存器,每个线程都有一个单独的PC寄存器】是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。字节码指令、分支、循环、跳转、异常处理原创 2021-03-30 16:53:27 · 198 阅读 · 0 评论 -
JVM系列-JVM整体架构图
1、大框架:2、基本加载流程:首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀);然后由JVM中的类加载器加载各个类的字节码文件;加载完毕之后,交由JVM执行引擎执行;在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存,在Java中我们常常说到的内存管理就是针对这段内存空间进行管理(如何分配和回收内存空间)。3、执原创 2021-03-30 15:58:32 · 700 阅读 · 3 评论 -
Java字节码系列-了解字节码基本结构
1、基本介绍:.java文件通过javac编译后将得到一个.class文件,比如编写一个简单的ByteCodeDemo类,编译后生成ByteCodeDemo.class文件,打开后是一堆十六进制数,由十部分按照固定的顺序组成。JVM的指令集是基于栈而不是寄存器,基于栈可以具备很好的跨平台性(因为寄存器指令集往往和硬件挂钩),但缺点在于,要完成同样的操作,基于栈的实现需要更多指令才能完成(因为栈只是一个FILO结构,需要频繁压栈出栈)。另外,由于栈是在内存实现的,而寄存器是在CPU的高速缓存区,相较而言原创 2021-03-29 18:28:06 · 360 阅读 · 0 评论 -
Java设计模式系列-访问者模式
此设计模式系列,均为用通俗易懂的语言抛砖引玉,不作深究,最近在系统学习ASM字节码框架,里面用到了各种Visitor类,大量应用了访问者设计模式,特记录此篇文章。1、基本介绍:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些数据元素的新的操作。主要解决:稳定的数据结构和易变的操作的解耦。假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,可以使用访问者模式把这些操作封装到访问者中去,这样便避免了这些不相干的操作污染这个对象。2、成员:一个.原创 2021-03-11 14:59:14 · 139 阅读 · 0 评论 -
JVM系列-深究Java中的常量池
1、基本概念:1.1、常量:常量是用final修饰的变量或者是在编译时期定义好的字符串。常量在类编译时期载入类的常量池中。1.2、什么是字面量和符号引用:字面量包括:1.文本字符串 2.八种基本类型的值 3.被声明为final的常量等;符号引用包括:用一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。它与直接引用区分一下,直接引用一般是指向方法区的本地指针。一般包括三类常量:1.类和方法的全限定名 2.字段的名称和描述符 3.方法的名称和描原创 2021-03-11 11:28:53 · 217 阅读 · 0 评论 -
在mac上安装MySql遇到的那些坑
1、在官网下的MySql安装器,安装不了,老是最后一步报错安装器遇到一个错误,导致安装失败:原因:我用的是macos 10.15系统,它本身没有生成目录/private/tmp解决办法:打开目录/private/,然后手动建立文件夹tmp即可解决。2、在安装MySql后,启动不了,启动后几秒钟自动关闭:原因:看错误日志/usr/local/mysql/data/mysqld.loca...原创 2020-03-24 15:53:09 · 937 阅读 · 1 评论 -
【Docker系列01】Docker Mac安装教程
1、基本介绍:Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。可以类比于虚拟机,但是比虚拟机更为轻便。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而Docker内的应...原创 2020-03-23 12:00:42 · 384 阅读 · 0 评论 -
【设计模式.结构型】装饰模式
1、基本介绍:装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。动态地给一个对象增删一些额外的功能。(继承不能做到这一点,继承的功能是静态的,不能动态增删。2、成员:抽象构件(Component)角色: 它是具体构件和抽象装饰类的共同父类,声明了在具体构件中需要实现的业务方法,它的引入可以使客户端以一致的方式处理未被装...原创 2018-07-06 10:49:43 · 282 阅读 · 0 评论 -
JVM系列-GC垃圾回收机制
1、基本介绍:• 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。 • 它让开发者无需关注空间的创建和释放,而是以守护进程的形式在后台自动回收垃圾。该进程会在内存紧张的时候自动跳出来,把堆空间的垃圾全部进行回收,从而保证程序的正常运行。 • 顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被...原创 2018-07-08 10:38:27 · 500 阅读 · 0 评论 -
【java集合类】HashMap-带你彻底搞定HashMap原理
1、基本概念: 惯例:我喜欢一开始把一篇文章涉及到的关键概念在文章开头就交代清楚,这样再小白的读者都能读懂文章。哈希表【散列表】:采用散列技术将记录存储在一块连续的存储空间中,这块连续的储存空间称为哈希表或者散列表。哈希表里存储的是关键码值(Key value)类型数据,比如HashMap中存的就是Entry对象。不是传统意义上的数组,可以理解为一开始固定容量固定位置的数组...原创 2018-05-20 22:10:55 · 972 阅读 · 2 评论 -
【设计模式.创建型】4种单例模式-彻底理解双重加锁机制
1、基本介绍:保证一个类仅有一个实例,并提供一个访问它的全局访问点。2、用途:1. 应用中某个实例对象需要频繁的被访问。2. 应用中每次启动只会存在一个实例。如账号系统,数据库系统。3、实现方式:3.1、lazy instantiaze 懒加载public class Demo1 { private Demo1() { } private ...原创 2018-05-19 01:16:03 · 1565 阅读 · 0 评论 -
【java并发编程】一篇文章让你彻底玩转java线程池应用
1、基本介绍:1.1、线程池好处:创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率: 线程池缓存线程,可用已有的闲置线程来执行新任务。线程并发数量过多,抢占系统资源从而导致阻塞: 我们知道线程能共享系统资源,如果同时执行的线程过多,就有可能导致系统资源不足而产生阻塞的情况。运用线程池能有效的控制线程最大并发数,避免以上的问题。对线程进行一些简...原创 2018-05-18 19:01:18 · 195 阅读 · 0 评论 -
【java并发编程】线程相关操作-一篇文章让你彻底搞清楚yield(),sleep(),join(),interrupt(),wait(),notify(),notifyAll()
1、线程中断:void interrupt() 中断线程。static boolean interrupted() 测试当前线程是否已经中断。boolean isInterrupted() 测试线程是否已经中断。 1. public class InterruptTest { ...原创 2018-05-18 18:39:59 · 368 阅读 · 0 评论 -
【java并发编程】创建线程Thread的2种方法-妈妈再也不用担心我的多线程编程
1、继承Thread类实现多线程:继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方...原创 2018-05-18 18:19:42 · 299 阅读 · 0 评论 -
【java并发编程】线程基础知识-一张图帮你轻松拿下线程5种状态,带你走进线程上下文切换,java中神秘的守护线程概念,带你了解线程优先级
1、线程的5种状态:要获取Java线程的状态可以使用 java.lang.Thread类中定义的 getState()方法。获取当前线程的状态就可以使用Thread.currentThread().getState()来获取。该方法返回的类型是一个枚举类型,是Thread内部的一个枚举,全称为“java.lang.Thread.State”,这个枚举中定义的类型列表就是Java语言这个级别...原创 2018-05-18 18:08:07 · 228 阅读 · 0 评论 -
【java并发编程】相关概念-通俗易懂:进程线程区别,并发编程3大特性,线程阻塞与线程非阻塞,线程安全,线程饥饿,死锁,线程同步与线程异步
1、原子性: 一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。2、可见性: 当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。3、有序性: 程序执行的顺序按照代码的先后顺序执行。 注意:此处的顺序执行是指程序最终的执行结果跟程序严格按照代码的书写顺序执行的结果是一样的,对应的是...原创 2018-05-18 17:41:15 · 253 阅读 · 1 评论