Java进阶之路
文章平均质量分 82
求真、务实
legendaryhaha
legendaryhaha的博客
展开
-
【Java】2023年业务实践中遇到的所有OOM情况及实战总结
在Java开发中,随着应用程序变得越来越复杂,内存管理问题也变得愈加重要。而在JVM中的"OOM"(Out of Memory)错误是Java程序员经常面临的一种挑战。本文将深入探讨JVM OOM错误,了解其原因、种类以及如何处理,在文中的最后,也总结了常用的JVM内存分析工具。原创 2024-01-08 14:51:57 · 1564 阅读 · 3 评论 -
【Java】2023年Java语言盘点
星河流转,日月更替,在2023这年里,Java也迎来了它的第28个年头。在这一年里,Java生态系统发生了许多让人瞩目的变化,包括Java语言本身的更新、亦或是主流框架的迭代,以及开发者社区的活跃程度。那么本文让我们一起盘点2023年Java都做了哪些改变。原创 2024-01-07 14:33:59 · 1868 阅读 · 3 评论 -
Java 引用
Java 引用前言强引用软引用弱引用虚引用前言很早之前就有看过一些关于Java 引用的文章,此次借着阅读<<深入理解Java虚拟机>>一书,归纳引用这一块的一些知识。而关于为何要区分这么些个引用呢?我的理解是帮助GC(垃圾回收器)回收对象,达到管理内存的目的。强引用类似 Object obj=new Object()的引用方式,GC(垃圾收集器)永远不会回收。可以通过显示的置为null,来帮助垃圾收集器回收此对象。这也是我们在阅读一些JDK的集合源码时,有时会看到大神们似原创 2021-02-25 09:36:11 · 162 阅读 · 0 评论 -
Java序列化源码概况
Java序列化原理概念实现原理ObjectOutputStreamwriteObject0writeOrdinaryObjectwriteSerialDatadefaultWriteFields总结概念Java序列化是把Java对象转换为字节序列的过程。Java反序列化是指把字节序列恢复为Java对象的过程。实现借助Java提供的API:java.io.ObjectOutputStream(对象输出流)和java.io.ObjectInputStream(对象输入流)。待序列化的实体类要实原创 2021-02-23 12:14:23 · 285 阅读 · 0 评论 -
Java反射
Java反射何为反射双亲委派机制打破双亲委派机制SPI何为反射在Java中,如果想动态获取一个运行时的类信息如属性、方法等,你会想到何种方法呢?方法之一,就是运用本文想要阐述的反射机制了。在编写代码的时候,有时在引用第三方类又或者作为一个公共服务给外界使用时,有些属性、方法等信息在编译阶段并不能获取到,需要在运行时才能确定下来。这种机制又叫做RTTI(Run-Time Type Identification,运行时类型识别),而实现这个机制的过程又可以称为反射。例如我们的JDBC,作为Java语原创 2021-02-22 18:01:31 · 219 阅读 · 0 评论 -
JVM规范&源码|字符串长度限制问题
字符串长度限制问题前言分析字符串常量池前言通过阅读JVM规范和源码,我们可以知道,String无论是字面量定义的形式还是运行时生成的方式都是有限制的。Javac(eclipse编译方式可能作了些修改)编译阶段,字面量定义的字符串形式需要小于65535,运行时阶段大概小于2^31,4个G左右。分析如图所示,先动态的输出10w个1,然后copy出来,以字面量的形式定义一个字符串s,然后输出,此时会报错。报错原因为字符串过长,即编译阶段,字面量形式定义的字符串是会有限制的。有小伙伴可能说为啥原创 2020-05-31 10:41:30 · 771 阅读 · 0 评论 -
问题|e.printStackTrace()
问题|e.printStackTrace前言分析总结前言第一次对于这个e.printStackTrace()产生感情是在第一次上线前夕的时候,被大佬打回了版本修改。第二次是看到有人在群里说因为这个e.printStackTrace()导致整个程序都崩了。分析关于这个printStackTrace()方法,如果查看源码,你会发现它调用了printEnclosedStackTrace方法,最后由落到了println方法上,它是直接打印到控制台的。当上线时,我们的服务运行在后台进程,当大量请求进入时原创 2020-05-27 23:07:06 · 769 阅读 · 0 评论 -
谈谈Java里头的泛型
泛型擦除前言分析引申问题关于通配符的泛型前言当我们无法确定一个方法的参数、或者返回型是啥的时候,我们可以尝试通过泛型来解决。而泛型的种类有:泛型接口、泛型类、泛型方法、泛型变量这四种。尽管Java里头提供了这么些泛型方式,但它实际上却是伪泛型。在经过编译后,通过对字节码的查看,我们可以发现原先定义的泛型类型都被擦除了。分析在如下的例子中,申明了一个Test泛型类,其中还申明两个集合,而List是一个泛型接口。它的定义如下,这里我们分别申明了一个String类型的集合和一个Integer类型的集原创 2020-05-17 17:34:01 · 328 阅读 · 0 评论 -
Java 8 stream排序&分页
stream前提排序分页前提stream的降序排序和之前我们通过重写Comparable接口,实现降排相比,要节省很多代码,而用stream分页,额鹅…纯属玩玩,一般用来裁剪数据。排序List<Student newList = new ArrayList<>(10);//升序list.stream().sorted((v1,v2)->v1.getId().c...原创 2019-12-24 23:22:16 · 11473 阅读 · 0 评论 -
基于LRULinkedHashMap的缓存的实现
LRULinkedHashMap实现缓存前言前言LRU是Least Recently Used ,最近最少使用算法,第一次见到这个名词是在学操作系统、后面学网络原理时也遇到过一次。这一次在代码里看到大佬了用了这个实现缓存,研究了一下~ 一开始还挺纳闷,为啥不直接用先用现有的工具如redis去作缓存处理,大佬给出的解释是,用这个实现缓存是在JVM中实现缓存的,效率会比redis快很多,特别数据...原创 2019-09-08 17:53:59 · 376 阅读 · 1 评论 -
java初学者应该了解的一些名词
先 推一本书吧:java编程思想,虽然内容鼓噪乏味,但请耐心看下去~(233333,算是对自己的鞭策吧,哎)建议一边通过实际操作,一边理解这些名词,不然单纯的看太痛苦了。1. IDE集成开发环境(IDE,Integrated DevelopmentEnvironment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。如微软的Visual Stu...原创 2018-05-02 18:40:57 · 334 阅读 · 0 评论 -
考察java功底时刻来了~可以看看呀
1.String不是最基本的数据类型,java中的基本数据类型是byte,short,int,long,float,double,char,Boolean,其他都是引用类型。2.String不可以被继承,因为它是用final修饰的类。3.String和StringBuilder,StringBuffer的区别:String是只读字符...原创 2018-05-04 15:03:35 · 481 阅读 · 0 评论 -
java字符串深入了解
总结String,StringBuilder,StringBuffer字符串历史&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String诞生的最早,出生于JDK1.0时代,它属于不可变字符序列 。老二StringBuffer也出生于JDK1.0时代,它比String晚丢丢,其中,它的特点是线程安全的可变字符序列 。老三StringBuilder则出生原创 2018-10-14 20:21:26 · 141 阅读 · 0 评论 -
java之静态内部类/非静态类内部类的创建
package test;import test.TestClass.Inner;public class Implements { public static void main(String[] args) { TestClass test = new TestClass(); Inner inner = test.new Inner(); ...原创 2018-10-16 18:07:28 · 5121 阅读 · 2 评论 -
记录java中的object类以及wait和sleep区别额
java.lang.Objectpublic class Object: Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。它含有如下的方法:注意wait方法和sleep方法的区别:sleep 是Thread类中的方法!!!另外, wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不...原创 2018-10-26 21:16:34 · 608 阅读 · 0 评论 -
Java之RMI
RMI——Remote Method Invocation,它是Java提供的一组开发分布式应用程序的API,其运用的设计模式的思想是代理模式。是的,RMI由Java提供,这跟RPC的区别就很明显了,RPC(Remote Procedure Call)远程过程调用是可以由不同的语言实现,根据维基百科的解释 —— RPC 指在分布式环境下,一个计算机程序能调用另一个不同地址空间里的方法(不同地...原创 2019-05-03 10:07:31 · 196 阅读 · 0 评论 -
Java中各个集合的关系图
Java之各集合的关系图逼逼几句Collection体系几个collection集合的区分Map体系几个Map的区分Collection和Collections的区别逼逼几句之所以会画这几个图,就是想归纳一下学过、用过的各个集合,然后能形成自己的知识体系,平时还是要更多的注重实践,就敲代码,敲多了就能记住了。下面这几个图并不代表Java所有的集合,太多了,只画了我用过的和题目里出现过的一些集...原创 2019-03-21 13:02:28 · 1562 阅读 · 0 评论 -
Java异常分类
Java异常前言异常分类总结前言很早就想整理一下Java的各个异常了,特别是初学Java时,总是对运行时异常、非运行异常、必检异常等概念傻傻分不清。参考了一下其他文章,大概整理一下,由于异常过多,只列出其分类和比较常见的异常。异常分类如图:所有的异常的基类是Throwable,由它派生的子类是Exception和Error。其中,Exception又派生出运行时异常和非运行时异常两个分支...原创 2019-03-13 09:38:31 · 184 阅读 · 0 评论 -
Java 中继承关系和try-finally有返回值时的执行顺序
Java 基础知识前言正文前言基础打不牢,地动山摇。刷题时发现之前做过的一道题,结果又做错了。在ide打断点调试许久,在这里记一下。正文如下:答案:首先,程序执行时,先执行new B(),又因为B继承于A,所以根据B中的super(5),先调用A中的构造方法,而在A中又需要调用setValue(int value)方法。根据多态的概念,子类重写父类的方法后,父类的方法会被覆盖...原创 2019-03-11 20:28:04 · 216 阅读 · 0 评论 -
Java之throw和throws的区别
throw和throws的区别共同点区别总结共同点两者在抛出异常时,抛出异常的方法并不负责处理,顾名思义,只管抛出,由调用者负责处理。区别(1)throws用于方法头,表示的只是异常的申明,而throw用于方法内部,抛出的是异常对象。(2)throws可以一次性抛出多个异常,而throw只能一个(3)throws抛出异常时,它的上级(调用者)也要申明抛出异常或者捕获,不然编译报错。而...原创 2019-03-11 16:56:52 · 19924 阅读 · 5 评论 -
java的类加载顺序和创建对象时的调用顺序
java的类加载顺序和创建对象时的调用顺序类的加载顺序创建对象的过程注意类的加载顺序有父子关系的类在加载时先调用父类静态初始化块,静态属性,但不包括静态方法,然后再是,子类静态初始化块,静态属性,但同样不包括静态方法 。创建对象的过程先是父类非静态初始化块,非静态属性 ,再是父类构造函数,然后是子类非静态初始化块,非静态属性 ,最后是子类构造函数运行结果注意(1)子类在继承父类...原创 2018-11-03 21:09:35 · 4642 阅读 · 1 评论 -
java之ArrayList初始容量源码解析【jdk 1.8】
ArrayList解析继承的类和实现的接口构造方法继承的类和实现的接口public class ArrayList&lt;E&gt;extends AbstractList&lt;E&gt;implements List&lt;E&gt;, RandomAccess, Cloneable, SerializableList 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 nu...原创 2018-11-03 11:49:28 · 784 阅读 · 1 评论 -
java各数据类型的默认值【含各种变量】
时间一长,总是忘记,这里记一下在java中,局部变量,没有默认值,如果在声明时,未赋值,在接下来的程序中直接使用该变量的值将由编译器检查出错误。(包装类也一样)而与之相对的是成员变量(也叫类成员),如果是八种基本数据类型(byte, short, int, long, float, double, boolean, char,在没有被手动赋值的却在程序中被使用的情况下,将被赋予初值:如果...原创 2018-10-27 20:29:47 · 6962 阅读 · 2 评论 -
java中的instanceof用法
instanceof的作用它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。如下:public class Test{ public static void main(String args[]){ class A{} class B extends A{} class C extends...原创 2018-10-27 00:36:54 · 475 阅读 · 0 评论 -
JNDI的来龙去脉
JNDI的来龙去脉前言NamingDirectory学习资料参考资料:什么是JNDI?前言JNDI这个名词第一次见到是在阅读SpringBoot源码的时候,在看BeanFactory接口的一个实现类SimpleJndiBeanFactory的时候,有这么一段解释:This factory resolves given bean names as JNDI names within t...原创 2019-06-14 20:46:21 · 573 阅读 · 0 评论