Java
文章平均质量分 88
章全蛋
这个作者很懒,什么都没留下…
展开
-
Java 垃圾回收机制及算法
Java 垃圾回收机制及算法垃圾回收概述什么是垃圾回收说起垃圾收集(Garbage Collection, 下文简称 GC) , 有不少人把这项技术当作 Java 语言的伴生产物。 事实上,垃圾收集的历史远远比 Java 久远, 在1960年诞生于麻省理工学院的 Lisp 是第一门开始使用内存动态分配和垃圾收集技术的语言。垃圾收集需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?Java 垃圾回收的优缺点优点:不需要考虑内存管理可以有效的防止内存泄露,有效地利用可使原创 2021-09-22 14:30:47 · 695 阅读 · 0 评论 -
面经手册 —— 谈谈对 CAS 的理解
面经手册 —— 谈谈对 CAS 的理解题目描述提问线路: CAS => Unsafe => CAS 底层原理 => 原子更新 => 如何规避 ABA 问题面试题分析compareAndSet 怎么用?import java.util.concurrent.atomic.AtomicInteger;public class Main { /** * boolean compareAndSet(int expect,int update) *原创 2021-04-02 18:05:57 · 214 阅读 · 0 评论 -
JVM 内存模型
JVM 内存模型JVM 内存结构每个线程都只能访问自己的线程栈。每个线程都不能访问(看不见)其他线程的局部变量。所有原生类型的局部变量都存储在线程栈中,因此对其他线程时不可见的。线程可以将一个原生变量值的副本传给另一个线程,但不能共享原生局部变量本身。堆内存中包含了 Java 代码中创建的所有对象,不管是哪个线程创建的。其中也涵盖了包装类型(例如 Byte,Integer,Long 等)不管是创建一个对象并将其赋值给局部变量,还是赋值给另一个对象的成员变量,创建的对象都会保存到堆内存中。原创 2020-12-11 15:26:54 · 126 阅读 · 0 评论 -
JVM 类加载器
JVM 类加载器类的生命周期一个类从被加载到虚拟机内存开始,到卸载出内存为止,这个生命周期经历了七个阶段:加载、验证、准备、解析、初始化、使用、卸载。加载(Loading):找 Class 文件通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口验证(Verification):验证格式、依赖验证的目的是确保Cl原创 2020-12-10 19:46:13 · 140 阅读 · 1 评论 -
Java常用命令——jps/jstat/jinfo/jmap/jstack
文章目录Java常用命令——jps/jstat/jinfo/jmap/jstackjps:输出Java进程`jps``jps -v` 输出 jvm 启动参数`jps -l` 输出主类名或 jar 包jstat:查看虚拟机运行状态`jstat -class [pid]` 类加载/卸载的总数量/总空间、类加载耗费时间`jstat -gc [pid]` 堆内存各区域用量,垃圾收集时间`jstat -gcutil [pid]` 与-gc差不多,主要关注已使用空间的百分比jinfo:java配置信息`jinfo [p原创 2020-12-01 20:17:13 · 820 阅读 · 1 评论 -
Java 集合之 ArrayList
先从 ArrayList 的构造函数说起ArrayList 有三种方式来初始化,构造方法源码如下:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 默认初始容量大小 */ private static final int原创 2020-09-17 17:51:17 · 487 阅读 · 0 评论 -
Java 接口是否可以继承多个接口?
Java 接口是否可以继承多个接口?我们都知道,Java类是单继承,那接口可以多继承吗?答案是:Java 接口是可以继承多个接口的Java不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。注意:1)一个类如果实现了一个接口,则要实现该接口的所有方法,包括该接口继承的接口的所有方法。2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是vo原创 2020-06-11 12:00:51 · 6128 阅读 · 1 评论 -
Java 基础 —— 反射
反射 —— 框架设计的灵魂反射的基本概念: 将类的各个组成部分封装成其他对象,这就是反射机制作用:可以在程序运行的过程中,操作这些对象可以解耦,提高程序的可扩展性在学反射之前,我们首先来了解下Java类的加载过程当我们 new Person 对象时jvm会使用ClassLoader(类加载器)加载编译好的Person.class字节码文件加载到jvm内存中在jvm内存里有一...原创 2020-04-30 17:53:26 · 127 阅读 · 0 评论 -
Java 基础 —— Map
Map 集合的特点java.util.Map<k,v> 集合Map集合的特点:Map 集合是一个双列集合,一个元素包含两个值(一个key,一个value)Map 集合中的元素,key和value的数据类型可以相同,也可以不相同Map 集合中的元素,key是不允许重复的,value是可以重复的Map 集合中的元素,key和value是一一对应的Map常用子类Hash...原创 2020-04-29 16:10:35 · 293 阅读 · 0 评论 -
Java 基础 —— 可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式:修饰符 返回值类型 方法名(参数类型... 形参名){ }其实这个书写完全等价与修饰符 返回值类型 方法名(参数类型[] 形参名){ }只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。JDK1.5以后。出现了简化操作。… 用在参数上,称之为可变参数。同...原创 2020-04-28 14:49:47 · 159 阅读 · 0 评论 -
Java基础 —— Java 中常见的数据结构
常见的数据结构栈栈:stack 又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他位置进行添加、查找、删除等操作。简单的说:采用该结构的集合,对数据的存取有如下的特点:先进后出:存进去的元素,要在它后面的元素依次取出后,才能取出该元素栈的入口、出口都是在栈的顶端位置简单的说:采用该结构的集合,对元素的存取有如下的特点压栈/入栈:就是...原创 2020-04-27 16:46:30 · 676 阅读 · 0 评论 -
Java 基础 —— Lambda表达式
Lambda表达式函数式编程思想概述在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想: 只要能获取到结果,谁去做的,怎...原创 2019-11-23 16:06:03 · 207 阅读 · 0 评论 -
Java 基础 —— 线程安全
线程安全如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。我们通过一个案例,演示线程的安全问题:电影院要卖票,我们模拟电影院的卖票过程。本次电影的座位共100个我们来模拟电影院的售票窗口,实现多个窗口同时卖这场电影票public class RunnableImpl impleme...原创 2019-11-21 20:44:12 · 173 阅读 · 0 评论 -
Java 基础 ——线程
并发与并行并发:指两个或多个事件在同一个时间段内发生。并行:指两个或多个事件在同一时刻发生(同时发生)。在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。而在多个 CPU 系统中,则这些可以并发执行的程序...原创 2019-11-21 19:42:39 · 85 阅读 · 0 评论 -
Java 基础 —— 泛型
泛型泛型概述Java集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。观察下面代码:public class GenericDemo { public static void main(String[] args) { Collection coll = new ArrayLi...原创 2019-11-18 20:52:11 · 73 阅读 · 0 评论 -
Java 基础 —— Collection集合
Collection集合1.1 集合概述集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。1.2 集合框架JAVASE提供了满足各种需求的A...原创 2019-11-18 16:40:08 · 195 阅读 · 0 评论 -
Java 基础 —— 包装类、自动装箱与自动拆箱、基本类型与字符串之间的转换
包装类概述Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:基本类型对应的包装类(位于java.lang包中)byteByteshortShortintIntegerlongLongfloa...原创 2019-11-18 12:11:36 · 145 阅读 · 0 评论 -
Java 基础 —— StringBuilder类 字符串缓冲区
StringBuilder类字符串拼接问题由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。例如:public class StringDemo { public static void main(String[] args) { String s = "Hello"; s += "World"; ...原创 2019-11-18 11:27:49 · 412 阅读 · 0 评论 -
Java 基础 —— 日期类和日期操作类 常用方法
Date类概述java.util.Date类 表示特定的瞬间,精确到毫秒。继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date):分配Date对象并初始化此对象,以表示自从标准基...原创 2019-11-15 16:16:48 · 309 阅读 · 0 评论 -
Java 基础 —— 字符串常量池及字符串常用方法
字符串常量池作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能字符串常量池的设计思想字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化为字符串开辟一个字符串常量池,类似于缓存区创建字符串常量时...原创 2019-10-31 11:55:22 · 283 阅读 · 0 评论