- 博客(26)
- 收藏
- 关注
原创 Java8新特性
Java8新特性一、Lambda表达式lambda表达式的基础语法: Java8中引入了一个新的操作符“->"该操作符称为箭头操作符或Lanbdam操作符 箭头操作符将Lambda表达式拆成两部分 左侧:Lambda表达式的参数列表 右侧:Lambda表达式中所需执行的功能,即Lambda体 语法格式一:无参,无返回值 () -> System.out.println("Hello Lambda!"); //无参,无返回值的Lambda表达式.
2020-11-07 21:50:07 152
原创 MySQL数据库基础知识
一、为什么要学习数据库? 持久化数据 方便检索 存储大量数据 共享、安全 通过组合分析,获取新的数据 二、数据库的相关概念1.DBDB:database数据库,存储一系列有组织数据的容器2.DBMSDBMS:database Management System数据库管理系统,使用DBMS和维护DB3.SQLSQL:StructureQueryLanguage结构化查询语言,程序员用于和DBMS通信的语言三、数据库存储数据的特点
2020-11-07 21:47:23 182
原创 解决Invalid bound statement (not found)问题
这里主要分为三个原因:1.dao层与mapper.xml相关原因(1)dao层的方法和mapper.xml中的方法不一样;(2)mapper中的namespace resultParameter 和对应的dao层entity层不一样(3)拼写错误 如漏写 少写 多写....2.spring配置文件中关于mybatis的与xml文件路径寻找相关的配置没有写 ,导致调用dao层方法时,没有寻找dao.xml文件的正确路径 结果dao迷路了 从而两者无法映射<!--配置Sql...
2020-11-03 19:59:26 3659
原创 G1回收器介绍
G1回收器:区域化分代式G1垃圾收集器是在Java7 update4之后引入的一个新的垃圾回收器,是当今收集器技术发展的最前沿成果之一。与此同时,为了适应现在不断扩大的内存和不断增加的处理器数量,进一步降低暂停时间,同时兼顾良好的吞吐量。G1是一个并行回收器,它把堆内存分为很多不相关的区域。使用不同的Region来表示Eden、Survivor0区,survivor1区,老年代等。G1 GC有计划地避免在整个Java堆中进行全区域地垃圾收集。G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获
2020-10-12 20:27:33 781 1
原创 CMS回收器介绍
CMS回收器:低延迟在JDK1.5,HotSpot推出了一款在强交互应用中几乎可认为有划时代意义的垃圾收集器:CMS(Concurrent-Mark-Sweep)收集器,这款收集器是HotSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程同时工作。CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短,就越适合与用户交互的程序,良好的响应速度能提升用户体验。CMS垃圾收集算法采用标记-清除算法,并且也会”Stop-The-World"CM
2020-10-12 18:40:16 519
原创 ParNew回收器和Parallel Scavenge回收器介绍
ParNew回收器1.如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本。2.ParNew收集器除了采用并行回收的方式执行内存回收外,两款垃圾收集器之间没有任何区别。ParNew收集器在年轻代中也是采用复制算法"Stop-The-World"机制。3.ParNew是很多JVM运行在Server模式下新生代的默认垃圾收集器。ParNew回收器的工作过程如下图:在程序中,开发人员可以通过选项”-XX:+UseParNewGC"手
2020-10-12 15:07:09 3559
原创 Serial收集器介绍
Serial回收器1.Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代的唯一选择。2.Serial收集器作为HotSpot中Client模式下的默认新生代垃圾收集器。3.Serial收集器采用了复制算法、串行回收和“Stop-The-World"机制的方式执行内存回收。4.除了年轻代之外,Serial收集器还提供用于执行老年代垃圾收集的Serial Old收集器。Serial Old收集器同样采用了串行回收和“Stop-The-World"机制,只不过内存回收
2020-10-12 14:24:48 1404
原创 3种垃圾收集算法的思想
标记-清除算法算法分为“标记”和“清除”两个阶段:1.标记:垃圾收集器从根节点出发,标记所有被引用的对象,一般是在对象的Header中记录为可达对象。2.清除:垃圾收集器对堆内存从头到尾进行线性的遍历,如果发现某个对象没有标记为可达对象,则将其回收。缺点:1.效率不算高。2.在进行GC的时候,需要停止整个应用程序,导致用户体验差。3.这种方式清理出来的空闲内存是不连续的,产生内存碎片,需要维护一个空闲列表。注意:这里所谓的清除并不是真的置空,而是把需要清除的对象地址保存在空闲
2020-10-12 13:53:24 78
原创 7种经典的垃圾收集器之间的关系
垃圾收集器是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,这里讨论的是基于JDK1.7之后的HotSpot虚拟机。如下图所示:1.两个收集器之间有连线,表明它们可以搭配使用。2.其中Serial Old作为CMS出现"Concurrent Mode Failure"失败的后备预案。3.(红色虚线)由于维护和兼容性测试的成本,再JDK8时将Serial+CMS、ParNew+Serial Old这两个组合声明为废弃,并在JDK9完全取消了这些组合的支持,即移除
2020-10-12 13:03:06 404
原创 JVM内存溢出与内存泄漏详解
内存溢出javadoc中对内存溢出的解释是:没有空闲内存,并且垃圾收集器也无法提供更多内存。首先说没有空闲内存的情况:说明Java虚拟机的对堆内存不够,原因有二:1.Java虚拟机设置的堆内存不够。比如:可能存在内存泄漏问题,也很有可能就是堆的大小不合理,比如我们要处理比较可观的数据量,但是没有显式指定JVM堆大小或者指定值偏小,我们可以通过-Xms,-Xmx来调整。2.代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。对于老版本的Oracle JDK,因为永久代
2020-10-10 11:11:49 300
原创 关于蓝桥杯最大最小公倍数的java实现
问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504在一组数中找三个数,使他们的最小公倍数最大。首先,先从两个数的最大公倍数开始,当两个数互质的时候,最小公倍数就是它们的乘积,当然,这也是最大的最小公倍数,所以,拓展到三个数,就是要找出三个两两互质的数。有一个结论我们的先知道,就是相邻的两个自然数是互质的。一组从1~N的数中,最大的.
2020-09-29 15:54:12 185
原创 java中各进制之间的转换
十进制转成十六进制:Integer.toHexString(int i)十进制转成八进制:Integer.toOctalString(int i)十进制转成二进制:Integer.toBinaryString(int i)十六进制转成十进制:Integer.valueOf("FFFF",16)八进制转成十进制:Integer.valueOf("876",8)二进制转十进制:Integer.valueOf("0101",2)将字符串参数解析未第二个参数指定的基数中的有符号整数:Inte
2020-09-29 12:33:24 266
原创 方法区的核心概述
方法区的基本概述:方法区与Java堆一样,是各个线程共享的内存区域。方法区在JVM启动的时候被创建,并且它的实际物理内存空间和Java堆一样可以是不连续的。方法区的大小,跟堆空间一样,可以选择固定大小或者可拓展。方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出OOM(OutOfMemoryError)异常。关闭JVM就会释放这个区域的内存。在jdk7及以前,习惯上把方法区称为永久代。jdk8开始,使用元空间取代了永久代。本质上,方法区和永久代并不等价,
2020-09-27 22:34:16 223
原创 JVM中堆的核心概述
一个JVM实例只存在一个堆内存。堆也是Java内存管理的核心区域,Java堆区在JVM启动时被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处在物理上不连续的内存空间,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(TLAB)。几乎所有的对象实例都在堆里分配内存。数组和对象可能永远不会存储在栈上,因为栈中保存引用,这个引用指向对象或者数组在堆中的位置。在方法结束后,堆中的对象不会马上被移除
2020-09-27 15:30:30 187
原创 JVM中的运行时数据区
java虚拟机在执行java程序的过程中会把它所管理的内存划分成不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE7版)》的规定,Java虚拟机所管理的内存会包括以下几个运行时数据区:程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳
2020-09-27 09:27:30 99
原创 JVM中的类加载子系统
类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。类加载子系统主要由三部分组成,分别是加载、链接、初始化。加载阶段中包含引导类加载器、拓展类加载器、系统类加载器、以及其他自定义类加载器。链接阶段又分为校验、准备、解析三个过程。类的加载过程:1.通过一个类的全限定名获取定义此类的二进制字节流。2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。3.在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的
2020-09-26 11:03:41 166
原创 java虚拟机的概述
概述:java虚拟机是一台执行java字节码的虚拟计算机,它拥有独立的运行机制,其运行的java字节码也未必由java编译而成。JVM平台的各种语言可以共享java虚拟机带来的跨平台性、优秀的垃圾回收器,以及可靠的即时编译器。java技术的核心就是java虚拟机,因为所有的java程序都运行在java虚拟机内部。作用:java虚拟机是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行,每一条java指令,java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理
2020-09-25 22:50:16 423
原创 关于可达性分析算法的概述
可达性分析算法主要是用来判断对象是否存活的。这个算法的基本思路是通过一系列称为”GC Roots“的对象作为起始点,从这些节点开始往下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(即从GC Roots到这个对象不可达)时,则证明此对象是不可用的。如下图所示:从图中可以看出,虽然object5,object6,object7互有关联,但是这些对象到GC Roots是不可达的,所以这些对象会被回收。在java语言中,可作为GC Roots的对象包括...
2020-09-25 22:01:01 1236
原创 关于String的intern()方法细节
String.intern()是一个Native方法,底层调用C++的 StringTable::intern方法实现。当通过语句str.intern()调用intern()方法后,JVM 就会在当前类的常量池中查找是否存在与str等值的String,若存在则直接返回常量池中相应Strnig的引用;若不存在,则会在常量池中创建一个等值的String,然后返回这个String在常量池中的引用。因此,只要是等值的String对象,使用intern()方法返回的都是常量池中同一个String引用,所以,这些等..
2020-09-25 15:44:09 1116 2
原创 关于String中创建对象的区别
String的创建方式一般有两种,一种是常见的new String(),如String s1 = new String("ab"),另一种是字面量赋值,如String s2 = "ab"。第一种对象的创建方式会创建两个对象,一个是new创建的对象,一个是在字符串常量池中创建"ab"字符串。第二种方式是直接在字符串常量池中创建"ab"字符串(前提是字符串常量池没有该字符串,有的话,直接把该引用赋值给s2)。public void test1(){ String s1 = "a" + ..
2020-09-25 13:35:16 329
原创 java创建对象的详细步骤
java创建对象一共分为六个步骤:1.判断对象对应的类是否加载、链接(链接又分为校验、准备、解析)、初始化。2.为对象分配内存: (1)如果内存规整——指针碰撞(假设java堆中内存是绝对规整的,所有用过的内存放一边,未使用过的放一边,中间有一个指针作为临界点,如果新创建了一个对象则是把指针往未分配的内存挪动与对象内存大小相同距离,这个称为指针碰撞。)。 (2)如果内存不规整——虚拟机维护一个列表、然后通过空闲列表分配内存。3.处理并发安全问题。4.初始化分配到的空间——给所有属..
2020-09-24 15:10:29 676
原创 StringBuffer常用方法简单总结
StringBuffer是字符串缓冲区,是一个容器,有三个特点。(1).长度是可以变化的。(2).可以操作多个数据类型。(3).最终会通过toString转换为字符串.StringBuffer的常用方法存储StringBuffer append(数据):将指定数据作为参数添加到已有数据结尾处。StringBuffer insert(int index,数据):将数据插入到指定位置...
2019-07-06 23:30:46 639
原创 单链表的描述(java语言描述)
单链表是通过指向后继节点的指针把他的一串节点链接成一个链。以线性表中的第一个数据元素的存储地址称作线性表的头指针,一个单链表就是由一个头指针来唯一标识它。单链表一般有两种表达形式,一种是带头节点的单链表,另一种是不带头节点的单链表,下面我们对单链表的描述则是带头节点的单链表。首先需要一个节点类,代码如下:public class Node { public Object data...
2019-07-04 12:46:45 1130
原创 顺序表的描述(java语言描述)
顺序表,就是顺序存储的线性表,顺序存储是用一组地址连续的存储单元依次存放线性表中各个元素的存储结构,具有便于随机存取的优点,缺点是插入删除操作比较麻烦,在进行插入删除的同时,会引起大量数据的移动,而且需要预先分配空间,会造成空间的浪费。下面先用一个接口表明顺序表需要实现的基本操作。public interface IList { public void clear();//将表中的元素置空 ...
2019-07-04 12:25:32 953
原创 java中两种生成指定区间随机数
Java中有两种生成随机数的做法一种是直接调用Math类中的random方法,即Math.random(),该方法生成的[0,1)的随机双精度浮点数,我们可以通过变换来实现我们要的指定区间的随机数,如我们想生成[min,max]区间的整数,可以这样做,int ran=(int)(Math.random()*(max-min+1))+min。另一种是调用Random类中的nextInt,next...
2019-01-30 13:39:02 2198
原创 ==和equals的区别
1."= =“的用法(1)当数据类型为int,float,double,long,short等基本类型时,” = =“比较的是他们的值是否相等。(2)当数据类型是复合型时(如String,数组,一般类等),“= =”比较的是他们的存放地址是否相同。2.“equals”的用法(1)equals是继承自java.lang.Object类,即所有类都拥有equals方法,Object中的equa...
2019-01-29 21:48:14 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人