Java
文章平均质量分 92
菜鸟程序员丶
在变强的路上秃飞猛进!!!
展开
-
【JVM】gc实例深度解析(阈值,日志)
1.日志分析public class GText1 { public static void main(String[] args) { int length = 1024*1024; System.out.println("GC触发时机如下:"); byte[] a = new byte[2*length]; byte[] b = new byte[3*length];...原创 2020-03-24 19:10:24 · 1617 阅读 · 0 评论 -
【JVM】GC模型(知识梳理)
文章目录垃圾判断算法引用计数算法根搜索算法GC算法标记——清除标记——整理复制算法分代算法内存回收GC的时机垃圾收集器详述Serial收集器ParNew收集器Parallel Scavenge收集器Parallel Old收集器CMS "( Concurrent Mark Sweep ) 收集器垃圾判断算法引用计数算法给对象添加一个引用计数器,当有一个地方引用它,计数器加1,当引用失效,计数...原创 2020-03-24 19:09:54 · 922 阅读 · 0 评论 -
【JVM】运行时内存数据区(main完整流程实例分析)
文章目录1.区域划分:Java虚拟机栈堆方法区域本地方法栈程序计数器实例分析:1.区域划分:Java虚拟机栈1.Java虚拟机栈也是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)2.如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常; 如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError...原创 2020-03-24 19:09:18 · 523 阅读 · 0 评论 -
【JVM】jvisualvm和jconsole工具(堆,栈,元空间溢出分析)
文章目录简介:jvisualvm:1.jvisualvm打开方式:2.堆内存溢出:3.虚拟机栈溢出jconsole工具简介:jvisualvm是jdk自带的一个强大工具,可以帮助我们更好的分析数据,本文通过使用jvisualvm来分析堆内存溢出和虚拟机栈溢出,并对jconsole工具加以说明;jvisualvm:1.jvisualvm打开方式:在CMD命令行输入jvisualvm即可:...原创 2020-03-18 18:43:17 · 2933 阅读 · 0 评论 -
【JVM】通过字节码深入理解细节知识点(包含字符串在常量池和堆中的差异比较)
1.构造方法默认构造方法多个自定义构造方法2.普通方法3.静态属性反编译的强大也是在我学习完之后知道的,他解决了在平时写代码时我们可能不会去考虑一些细节性的问题,就比如非静态成员是何时赋值的,无参构造方法真的没有参数吗?本文旨在通过反编译对相关知识进行分析。1.构造方法:默认构造方法:public class Son { String name = "XiaoHeng"; p...原创 2020-03-16 18:32:47 · 736 阅读 · 2 评论 -
【JVM】线程上下文类加载器详解
SPI机制简介SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想:我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块、xml解析模块、jdbc模块等方案。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了原创 2020-03-02 17:26:11 · 803 阅读 · 1 评论 -
【JVM】类加载器及其命名空间详解(源码分析+多问题解答)
文章目录1.类的加载2.类加载器的种类3.双亲委派模型Class对象:定义类加载器与初始类加载器4.类加载器的命名空间1.类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象( 规范并未说明Class对象位于哪里,HotSpot虚拟机将其放在了方法区中)用来封装类在方法区内的数据结构2....原创 2020-03-01 17:12:42 · 469 阅读 · 0 评论 -
【java】Linklist源码解读JDK1.8
本文旨在对Linklist源码进行解读,对代码基本进行了逐行注释并且将遇到的问题做出说明。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializab...原创 2020-01-20 17:40:06 · 215 阅读 · 0 评论 -
【java】Arraylist源码解读JDK1.8
本文旨在对Arraylist源码进行解读,对代码进行了逐行注释并且将遇到的问题做出说明。package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;import sun.misc.Sha...原创 2020-01-16 11:20:35 · 263 阅读 · 0 评论 -
【java】小工具 ————byte和int,string,long之间的相互转化
本篇博文旨在将数据转化做成工具,以供我们在使用时的便利(应用场景举例:多文件传输时的数据转化,服务器客户端之间的数据转化),其中包含的byte与其他几种基本类型之间的转化,可能遇到的问题在代码中以注释的形式加以叙述。public class BitToAll { private static final String Tensix = "0123456789ABCDEF"; pu...原创 2019-11-13 18:28:49 · 355 阅读 · 0 评论 -
【java】小工具————将空间长度转化为B,KB,MB,G
当我们想要输出下计算机磁盘已用空间和剩余空间时,就会遇到下面比较尴尬的情况:这个输出结果看起来实在是太不方便了,因此我们做一个小工具来改造改造。我们有两个版本的解决方法,分别是:“朴素版”和“炫技版”,这篇文章旨在讲述“炫技版”;朴素版:public static String TransformtoStringone(long para) { if(para<...原创 2019-11-08 20:25:23 · 324 阅读 · 0 评论 -
【java】RMI————模态对话框
1.简介:模态对话框(Modal Dialogue Box),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。(上述简介摘自https://baike.baidu.com/item/模态...原创 2019-11-08 18:08:10 · 393 阅读 · 0 评论 -
【java】工具————代理模式
前言:代理模式是java的一种常用工具之一,其目的就是为其他对象提供一种代理来控制对这个对象的访问。其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途,例如在RMI中客户端通过代理对服务器进行访问并得到其结果,拦截器的实现也是基于代理模式提供的间接操作以达到增加前置后置拦截。本文主要是说明两种代理模式,Cglib和JDKlib的使用并将其扩展成工具方便以后操作。...原创 2019-10-24 15:50:19 · 210 阅读 · 0 评论 -
【java】RMI————短连接(下)
承接上文,在搭建好基础框架后就该做核心部分,接下来就该考虑以下问题:1.为了保证接口中被执行方法的唯一性,客户端传递过来的是将要被执行的方法的hashcode,但是服务器调用的是该接口实现类的方法,两者hashcode不同,所以要想办法将接口方法的hashcode和实现类的方法对应起来。这算得上比较棘手的一个问题,我们可以采取以下做法:①.新建一个注解,该注解用于标记在接口实现类上,其...原创 2019-10-23 18:20:43 · 230 阅读 · 0 评论 -
【java】RMI————短连接 (上)
1.RMI简介:Remote Method Invocation远程方法调用这是一种基于网络的技术;本地机执行一个函数,而这个函数实质上是在服务器端的。也就是说,表面上是客户端在调用一个函数,但,本质上是服务器在执行这个函数,并通过网络返回函数的执行结果。2.几个基本问题可以确定:1、建立服务器;2、客户端连接服务器;3、在客户端执行一个方法,而该方法应该在服务器上执行;4、为了保...原创 2019-10-23 15:30:35 · 346 阅读 · 0 评论 -
【java】多线程实例————计时器
简述:计时器用以在用户的规定时间内执行一次用户的动作;计时器的功能决定其应用场景较为广泛。无论是生活中在对微波炉使用时的定时,还是在编程中对数据的定时检测,亦或者在我们玩游戏时排行榜的定时刷新都有有所使用。基本思路及问题:整体思路:创建两个线程,线程一主要负责计时工作,线程二主要负责时间到了后处理方法;先启动第二个线程,然后立即将其阻塞掉,等第一个线程的计时时间到了后唤醒第二个线程...原创 2019-10-18 20:09:47 · 2095 阅读 · 0 评论 -
【java】工具 ————Properties文件解析
简述:在一些场合下我们为了在不改动代码的情况下对相关方法进行操作或者是在方法执行前必要的参数就必须准备妥当,这时我们就可以采取“配置文件”的方法将相关数据配置进去以达到我们的目的,在众多配置文件中Properties文件是使用较多的一种。Properties文件采取的是键值对的形式来存储数据的,与java的map十分相似,所以我们用map来存储从Properties文件中解析的数据,又因为...原创 2019-10-18 17:08:25 · 253 阅读 · 0 评论 -
【java】工具————包扫描
包扫描工具的功能是:将给定一个包名称后,该工具会扫描并得到该包下所有的的子包和文件,并可以通过抽象方法实现对扫描到的文件做不同的处理。包扫描是现实我们框架“自动性”的重要工具之一,我们的Spring框架和CS框架都有用到该工具。以下便是包扫面的详细过程(具体问题以注释的形式在代码中做具体说明)public abstract class PackageScanner { public abs...原创 2019-10-05 16:48:51 · 399 阅读 · 0 评论