![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java知识点总结
文章平均质量分 50
IT圈最后的深情
00
展开
-
sychrongized 关键字
sychrongized关键字原创 2022-03-31 01:12:39 · 630 阅读 · 0 评论 -
Thread类
1.start()方法用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。2.run()方法run()方法是不需要用户来调用,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意:继承Thread类必须重写run方法,在run方法中定义具体要执行的任务。补充: start()方法来启动线程,通过调用Thread类的start()方法来起动一个线程,这原创 2022-03-31 00:54:16 · 261 阅读 · 0 评论 -
jvm调优之Arthas(阿里巴巴开源的Java诊断工具)安装教程及常用的基本命令演示
Arthas介绍:Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用tab键对各种信息的自动补全,诊断起来非常利索。官网:https://alibaba.github.io/arthas/index.htmlhttps://alibaba.github.io/arthas/index.htmlGithub地址:..原创 2022-03-29 02:32:09 · 1962 阅读 · 0 评论 -
JVM中对象如何在堆内存分配?
JVM中对象如何在堆内存分配?1、指针碰撞(Bump The Pointer) :内存规整的情况下;2、空闲列表(Free List) :内存不规整的情况下; 选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有空间压缩整理(Compact)的能力决定;因此,当使用Serial、ParNew等带压缩整理过程的收集器时,系统采用的分配算法是指针碰撞,既简单又高效;而当使用CMS这种基于清除(Sweep)算法的收集器时,理论上就只能采用较为复杂的空闲列表来分配内存原创 2022-03-29 02:02:28 · 426 阅读 · 0 评论 -
JVM老年代空间分配担保机制---及什么情况会进入老年代
新生代Minor GC后剩余存活对象太多,无法放入Survivor区中,此时就必须将这些存活对象直接转移到老年代去,如果此时老年代空间也不够怎么办?1、执行任何一次Minor GC之前,JVM会先检查一下老年代可用内存空间,是否大于新生代所有对象的总大小,因为在极端情况下,可能新生代Minor GC之后,新生代所有对象都需要存活,那就会造成新生代所有对象全部要进入老年代;2、如果老年代的可用内存大于新生代所有对象总大小,此时就可以放心大胆的对新生代发起一次Minor GC,因为 Min...原创 2022-03-29 01:56:13 · 1632 阅读 · 0 评论 -
JVM对象动态年龄判断是怎么回事?
虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold=15才能晋升老年代;结论-->动态年龄判断: Survivor区的对象年龄从小到大进行累加,当累加到X年龄(某个年龄)时占用空间的总和大于50%(可以使用-XX:TargetSurvivorRatio=?来设置保留多少空闲空间,默认值是50),那么比×年龄大的对象都会晋升到老年代;...原创 2022-03-29 01:47:53 · 412 阅读 · 0 评论 -
堆中对象的布局以及如何判断对象可以回收
原创 2022-03-29 01:44:16 · 267 阅读 · 0 评论 -
JVM运行时数据区中栈、堆,程序计数器、元空间,的特点及作用
jvm内存结构划分2.jvm运行时数据区 程序计数器的特点及作用:1.程序计数器是一块较小的内存空间,几乎可以忽略;2.是当前线程所执行的字节码的行号指示器;3.Java多线程执行时,每条线程都会有一个独立的程序计数器,各条线程之间互不影响;4.该区域是“线程私有”的内存,每个线程独立存储;5.该区域不存在OOM;6.无GC回收3.jvm运行时数据区 虚拟机栈的特点及作用:1.线程私有2.方法执行会创建栈帧,存储局部变量表等信息;3.方法执行遵原创 2022-03-29 01:37:19 · 1783 阅读 · 0 评论 -
详细分析JVM内存模型
1.JVM(1) 基本概念:JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。(2) 运行过程我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。也就是如下:① Java 源文件—->编译器—->字节码文件② 字节码文件—->J原创 2022-03-20 15:32:09 · 716 阅读 · 0 评论 -
内存溢出
内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区、堆、栈、本地方法栈、程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM。下面来分别说明几个区域出现OOM的情况及特征。1. java堆溢出(heap)Java堆内存主要用来存放运行过程中所有的对象,该区域OOM异常一般会有如下错误信息:java.lang.OutofMemoryError:Java heap space可以通过dump的内存快照就能分析,到底是由于程序原因导原创 2022-03-20 14:47:34 · 88 阅读 · 0 评论 -
为什么重写equals方法要重写hashcode?
为什么重写equals要重写hashcode方法* 因为 java 中判定两个对象是不是一致 是通过equals方法判定的* 如果equals 认定两个对象相等,那么我们认为这两个对象就是同一个对象* 既然是同一个对象,那么再HashMap中作为key来讲,就应该定位到同一个位置* 而HashMap定位是根据hashcode来定位的,所以要求这两个对象的hashcode返回的值是一样的* 换句话 equals 相等 那么hashcode一定也相等* 因为hashcode 是计算出来的原创 2022-03-14 16:51:01 · 365 阅读 · 0 评论 -
从源码分析128陷阱
从源码分析128陷阱,透彻原创 2022-03-10 00:31:46 · 105 阅读 · 0 评论 -
spring Aop
1、aop为面向切面编程,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性。优点:1、降低模块之间的耦合度2、使系统容易扩展3、更好的代码复用。AOP使用场景:AOP用来封装横切关注点,具体可以在下面的场景中使用:Authentication 权限Caching 缓存Context passing 内容传递Error handling 错误处理Lazy loading 懒加载Debugging 调试logging, tracin原创 2022-02-07 13:13:28 · 151 阅读 · 0 评论 -
Java中的自动拆装箱及128陷阱分析----超详细
128陷阱:integer a = 127 , Integer b = 127 时 , a 和 b 被自动装箱到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .所以在比较两个包装类的对象时, 尽量使用 equals 方法 ,这样可以得到你想要的结果 , 使用 == 号容易导致 128陷阱 .简单来讲就是:在小于127大于-128的时候原创 2021-12-06 19:50:41 · 400 阅读 · 0 评论 -
@ResponseBody解释
1、概念 注解 @ResponseBody,使用在控制层(controller)的方法上。2、作用 作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。 当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。 如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。3、注意编码 注解...原创 2021-11-20 12:23:47 · 379 阅读 · 0 评论 -
mybatis动态sql
一、动态sql的简述什么是动态sql:在不同条件下拼接不同的sql在我们以前用servlet的时候,我们就是用jdbc手动拼接的sql语句,我们在拼写的时候经常会出现sql拼写错误,比如入参写的不对,或者没有加单引号等等原因,那么动态sql语句就是帮我们去写这样的sql二、动态sql的使用案例元素—(讲课注意:username和sex必须一个为空)根据 username 和 sex 来查询数据。如果username为空,那么将只根据sex来查询;反之只根据username来查询首先先不使用动原创 2021-10-28 22:30:17 · 178 阅读 · 0 评论 -
mybatis 测试类编写
@Testpublic void findById() throws IOException {// 1.加载SqLMapConfig配置文件InputStream resourceAsStream = Resources . getResourceAsStream(“SqlMapConfig . xcm1”);//2.创建sqlSessionFactory工厂SqlSessionFactory factory = new Sq1SessionFactoryBuilder() . build(re原创 2021-10-27 16:58:33 · 445 阅读 · 0 评论 -
Java反射 详解
什么是反射?(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。反射:能够分析类能力的程序叫做反射翻译成原创 2021-10-20 17:52:36 · 128 阅读 · 0 评论 -
数组与Arraylist的区别
数组和ArrayList的本质区别在于前者是类型安全的,而后者是类型不安全的.ArrayList为了兼容所有类型对象,使用了Object数组,在使用元素的时候会有装箱和拆箱的操作,降低了程序的性能.ArrayList会动态扩充容量,容量为原来的2倍.ArrayList只有把元素添加进去之后才可以通过下标访问相应的元素.数组在创建的时候就已经确定了数据类型,并且它的长度是固定的,只能通过下标改变各个元素的值和访问.两者应用场景:如果已经知道数据的长度并且不需要频繁的做插入和删除操作,建议使用数组,原创 2021-09-26 16:15:07 · 595 阅读 · 0 评论 -
128陷阱
integer a = 127 , Integer b = 127 时 , a 和 b 被包装到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .所以在比较两个包装类的对象时, 尽量使用 equals 方法 ,这样可以得到你想要的结果 , 使用 == 号容易导致 128陷阱 .简单来讲就是:在小于127大于-128的时候,自动装箱的是同一个地址存原创 2021-09-19 10:08:43 · 67 阅读 · 0 评论 -
HashMap和HashTable有什么区别
1.hashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法2.hashtable是同步的,而hashMap是非同步的,效率上hashTable要高3.hashMap允许空键值,而hashtable不允许。原创 2021-09-03 03:47:35 · 196 阅读 · 0 评论 -
List、Set、Map之间的区别是什么?
原创 2021-09-03 03:46:35 · 226 阅读 · 0 评论 -
方法参数 知识点
一、基本概念参数类型形参:方法被调用时需要传递进来的参数,例如:function(int a)中的a,他只有func被调用期间a才有意义,也就是被分配内存空间,在方法function方法被执行完后,a就会被销毁释放内存空间,也就不存在了、 实参:方法被调用时传递进来的实际值,他在方法被调用前就已经被初始化,并且在方法被调用时传入。值传递(堆地址)和引用传递(传递栈的地址)值传递:在方法被调用时,实参通过把他的内容副本传入方法内部,此时形参接收的内容是实参的一个拷贝,因此在方法内对实参的任何操原创 2021-09-03 03:41:20 · 813 阅读 · 0 评论 -
static代码块,构造器,main方法
话不多说,直接看代码,看输出结果就能明白运行结果1.static代码块在main方法之前运行,因为static代码块在类加载阶段执行而main方法中构造器new的值要入堆内存以后才能执行,所以static代码块在main方法之前运行2.优点:优化main方法抽象类的抽象方法是子类必须实现的方法接口可以实现多继承,而类只能单继承静态块只初始化一次,所有的静态块的初始化只能由类的第一个对象触发...原创 2021-09-03 03:19:33 · 220 阅读 · 0 评论 -
java异常体系分析
一、java异常体系Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常, 这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。1、Error与Exception Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMe...原创 2021-08-29 11:13:12 · 91 阅读 · 0 评论