Java 基础
scfor333
一生几十亿万步
展开
-
HashMap——HashMap中的indexFor方法
HashMap 中如何确定元素的位置 众所周知,在 jdk 1.7 中,HashMap 底层是由数组 + 链表的方式实现的,那我们在使用 HashMap 的时候,是如何将我们的 key-value put 到 HashMap 中的呢HashMap 存放原理 在理解 HashMap 的存放原理前,我们先来回想一下数组,当我们想给数组中的一个元素进行赋值时,我们至少需要知道两个条件,一是数组的引用名称,二是想要被赋值的数组元素的索引,即array[i]中的array和i 我们再来看看,在 jd原创 2020-05-20 11:45:23 · 1460 阅读 · 2 评论 -
JAVA基础——使用cglib实现动态代理
JAVA 代理模式 简而言之,代理是一种通过创建代理对象的方式,从而实现对被代理对象实现功能增强的一种方式,JAVA 中有静态和动态两种代理,动态代理又可以分为基于接口的动态代理(JDK 实现)和基于子类的动态代理(cglib 实现),这里我们讲解基于子类的动态代理基于子类的动态代理(cglib 实现的动态代理) 使用代理的好处就是在不修改原代码的基础上可以实现对原方法的增强,使用...原创 2020-03-08 23:06:35 · 804 阅读 · 0 评论 -
JAVA基础——JAVA中的静态代码块和构造代码块
JAVA 中的代码块 在 Java 的 Class 中,存在着静态代码块、构造代码块、构造函数、普通代码块等结构,他们在 Class 中执行的顺序以及功能也有区别静态代码块 静态代码块的编写格式如下:static { System.out.println("Static");} 静态代码块在 Class 被加载时运行,且只运行一次,它的执行顺序优先于各种其他代码...原创 2020-03-02 20:39:04 · 198 阅读 · 0 评论 -
JAVA基础——JDK实现的动态代理
JAVA 中的动态代理 动态代理和静态代理类的区别在于,动态代理可以在程序运行时,动态地创建代理类,执行被代理类方法的同时,可以运行被代理类调用的拓展方法JDK 实现的动态代理 JDK 的动态代理要通过import java.lang.reflect包中的内容实现,代理类需要调用该包下的Proxy类下的newProxyInstance方法,返回一个Object类型的对象,这个对...原创 2020-02-22 09:46:58 · 151 阅读 · 0 评论 -
JAVA基础——静态代理
JAVA 中的代理 代理是一种23种经典设计模式之一,可以实现在不改变功能函数的情况下,实现对该函数、对象的功能拓展静态代理 静态代理是一种手动实现的,在程序运行之前代理类和被代理类的代理关系已经被确定好了,在使用静态代理时,代理类和被代理类必须实现同一个接口,演示如下 首先是接口类,很简单,就两个方法package Aspect;/** * 接口类 */publ...原创 2020-02-20 22:58:38 · 141 阅读 · 0 评论 -
JAVA基础——JAVA中的流
什么是 JAVA 中的“流” 流是一种抽象出来的概念,当数据在介质中传输,就形成了流,所以流就是用来进行数据的传输的流的分类 JAVA 中的流根据其在方向上、处理数据单元上、使用方式上可以分为很多种类 流可以分为输入流和输出流两大类, I(input)和 O(output),即我们常说的 I/O 流,这里的输入和输出是对 JAVA 程序来说的,数据流向 JAVA 程序时,是流...原创 2020-01-31 21:36:13 · 500 阅读 · 0 评论 -
JAVA基础——JAVA线程简介及两种创建方式
进程与线程什么是进程 进程是程序的一次执行过程,是一个动态的概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,也就是说,进程是应用程序运行的状态,应用程序的执行实例,有独立的内存空间和系统资源什么是线程 一个进程中包括多个线程,线程是 CPU 调度和分派的基本单位,是进程中执行运算的最小单位,真正在 CPU 上运行的是线程,可以与同一个进程中的其他...原创 2020-01-04 11:13:46 · 238 阅读 · 1 评论 -
JAVA基础——JVM之G1(Garbage-First)垃圾回收器
Garbage First 垃圾回收器G1 简介 G1(Garbage First)垃圾回收器是最新的 JDK 中默认的垃圾回收器,也是垃圾回收技术最前沿的成果,它同时注重吞吐量(Throughput)和低延迟(Low Latency),默认的暂停目标是 200ms,适用于超大的堆内存 G1 引入了分区(region)的思想,弱化了分代的概念,它将堆内存分为大小相等的区,每个区的大约...原创 2019-12-29 11:44:25 · 325 阅读 · 0 评论 -
JAVA基础——JVM之垃圾回收器
JVM 垃圾回收器 在 JVM 中,垃圾回收器大体分为三个种类:串行垃圾回收器、吞吐量优先的垃圾回收器和响应时间优先的垃圾回收器串行垃圾回收器 串行垃圾回收器是一种单线程的垃圾回收器,适合堆内存小,cpu 个数少的电脑 开启:-XX:+UseSerialGC = Serial + SerialOld 串行垃圾回收器分为两个部分:Serial 和 SerialOld,Se...原创 2019-12-28 16:51:26 · 203 阅读 · 0 评论 -
JAVA基础——JVM之垃圾回收算法
JVM 的垃圾回收算法 在 JVM 中,经常使用的垃圾回收算法有:标记-清除算法、标记-整理算法、复制算法以及分代回收算法,在这里会逐一介绍说明标记-清除算法(Mark Sweep) 标记清除算法的运行流程是先标记,将有引用链连接的引用对象进行标记,再将未被标记的引用对象的起始地址和结束地址存入空闲地址列表中,下次需要内存时直接对其进行覆盖 标记清除算法从原理上来说很容易实现...原创 2019-12-25 18:30:09 · 145 阅读 · 0 评论 -
JAVA基础——JAVA的五种引用类型及引用队列
JAVA 的五种引用类型及引用队列 在介绍 JAVA 的五种引用之前,先介绍一下什么是引用,以及引用和对象之间的关系什么是引用 众所周知,JAVA 是一种面向对象的语言,在 JAVA 程序运行时,对象是存储在堆内存(Heap)中的,C/C++ 中是通过指针来访问所谓对象(结构体)的,而 JAVA 则是通过引用来访问对象,也就是说,引用指向了对象在堆内存中的地址,引用本身也占用内存,6...原创 2019-12-22 15:21:47 · 1183 阅读 · 0 评论 -
JAVA基础——JVM之方法区、虚拟机堆、常量池、串池及对String的一些理解
JVM 虚拟机堆和方法区 虚拟机堆和方法区都存在与 JVM 的线程共享区,占有 JVM 内存中的很大一部分虚拟机堆 堆(Haep),在 Java 中所有通过 new 关键字创建的对象都会使用堆内存,堆是线程共享的,在堆中的对象都需要考虑线程安全问题(只要局部变量不逃逸出方法的作用范围,它就是线程安全的),另外堆还存在垃圾回收机制 垃圾回收机制是回收不再被引用、使用的变量,如果...原创 2019-12-04 21:20:15 · 283 阅读 · 0 评论 -
JAVA基础——JVM之Java虚拟机栈
Java 虚拟机栈 虚拟机栈描述的是 Java 方法执行的动态内存模型虚拟机栈的内容栈帧 在 Java 程序中的每个方法执行时,都会创建一个栈帧,伴随着方法从创建到执行完成,用于存储局部变量表、操作数栈、动态链接、方法出口等 虚拟机栈是存在大小的,当方法所占用的空间溢出,会产生 StackOverflowError局部变量表 局部表量表的内存空间在编译期即完成分配,...原创 2019-12-02 19:19:36 · 168 阅读 · 0 评论 -
JAVA基础——JVM简介及程序计数器
JVM JVM(Java 虚拟机),是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算功能来实现,引入 JVM 后,Java 语言在不同平台上运行时不需要重新编译,它屏蔽了与具体平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的字节码文件,就可以在多种平台上不加修改的运行JVM 基本结构 首先,JVM 分为线程共享区和线程独占区两部...原创 2019-12-01 18:32:57 · 348 阅读 · 0 评论 -
JAVA基础——JAVA简介和运行原理
JAVA 简介及运行原理 本系列主要更新 Java 基础相关的知识,最近准备重新复习一遍 Java 基础,主要涉及一些原理上的东西,会持续更新!##Java 简介 Java 是一种简洁的、面向对象的、分布式的、解释型的、健壮安全的、结构中立的、可移植的、性能优异、多线程的动态语言 看不懂吧,简单来说,Java 就是一种面向对象的编程语言,功能完善、安全、使用广泛,在 WEB...原创 2019-11-27 19:58:32 · 224 阅读 · 0 评论