Java基础
文章平均质量分 80
年少一梦
好好学习,天天向上!
展开
-
JAVA类加载过程
类加载内存分析一、JAVA内存二、类初始化三、类的加载与ClassLoader的理解四、程序public class Test05 { public static void main(String[] args) { A a = new A(); System.out.println(A.m); /** 1.加载到内存会产生一个类对应的Class对象 2.建立链接,链接后m=0 初始值 3.原创 2021-05-08 17:16:02 · 271 阅读 · 0 评论 -
集合类线程不安全问题
集合类线程不安全问题一、ArrayListArrayList底层是封装了数组,通过数组来存储数据的。当新建一个无参数的ArrayList时,new ArrayList() 的初始容量,在jdk1.6中的确是为10,然而在1.8中,如果只是new ArrayList() ,容量其实是0,当第一次通过add(E e)时,才扩充为10。原因:线程不安全,add方法没有用synchronized修饰。public static void main(String[] args) { List&原创 2021-03-22 23:47:03 · 178 阅读 · 0 评论 -
volatile和synchronize关键字的区别和在单例模式中的应用
volatile和synchronize关键字的区别和在单例模式中的应用一、对于内存模型的三大特性:有序性、原子性、可见性。1、原子性:(1)原子的意思代表着——“不可分”;(2)在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。原子性是拒绝多线程交叉操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。2、可见性线程执行结果在内存中对其它线程的可见性。变量经过volatile修饰后,对此原创 2021-03-17 10:01:38 · 270 阅读 · 0 评论 -
JAVA对象创建基础知识
一、 对象的创建过程具体步骤:(1) 申请内存。(2) 成员变量赋默认值。(3) 调用构造方法,成员变量赋初始值。(4) 建立关系(把栈空间的引用 t 和new 出来在堆里面的对象建立关联)二、对象怎么分配?(栈上-线程本地-Eden区-Old区)**注:TLAB(Thread Local allocation buffer)线程本地分配缓冲:**默认大小1%,可以调大小。分配不下会再分到Eden区。Eden区给每个线程分配一块私有的内存空间,不需要跟其他线程抢资源,也就不需要做线程同原创 2020-06-13 10:29:10 · 169 阅读 · 0 评论 -
Java垃圾回收(GC)机制笔记
JVM虚拟机一、 GC的基础知识什么是垃圾?C++ new deleteJAVA new ?自动类型回收,编程上简单,系统不容易出错,手动释放内存,容易出现两种类型的问题:(1) 忘记回收(2) 多次回收如何定位垃圾(1) 引用计数(count)(2) 根可达算法GC Algorithms(垃圾回收的算法)(1) Make-Sweep(标记清除):位置不连续,产生碎片。(2) Copying(拷贝):没有碎片,浪费内存。(3) Make-Compact(标记压缩):没原创 2020-06-09 23:33:04 · 335 阅读 · 0 评论 -
Java8新特性之Stream基础操作
Java8 Stream基础API使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询,Stream API提供了一种高效且易于使用的处理数据的方式。1、Stream是什么?是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。集合讲的是数据,Stream讲的是计算。“注意”(1) Stream自己不会存储元素。(2) Stream不会改变源对象。相反,它会返回一个持有结果的新Stream。(3) Stream操作是延迟执行的,这意味着它会等到需要结果时才执行。原创 2020-06-07 10:01:43 · 185 阅读 · 0 评论 -
JAVA8新特性之方法引用基础操作
方法引用(Method References)1、什么是方法引用?(1)方法引用可用于在不调用方法的情况下引用方法。它将方法视为Lambda表达式。它们只能作为语法糖来减少一些lambda的冗长。(2)当要传递的Lambda体的操作,已有实现方法,可以使用方法引用。2、方法引用格式在方法引用中,将包含方法的对象(或类)放在::运算符之前,将方法的名称放在不带参数的方法之后。3、方法引用的要求实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的参数列表和返回值类型保持一致。4.方法引用的原创 2020-06-06 17:54:12 · 133 阅读 · 0 评论 -
JAVA8新特性Lambda基础
JAVA8新特性一、Lambda表达式1.举例 (a,b) -> Integer.compare(a,b);2.格式:->:lambda操作符或者箭头操作符->:左边lambda形参列表(接口中抽象方法的形参列表,参数类型可以省略,1个参数时()也可以省略)->:右边lambda体(重写抽象方法的方法体,只有一条执行语句时,return和{}都可以省略)3. lambda表达式的使用(分6中情况介绍)(1) 无参无返回值 @Test public void tes原创 2020-06-04 23:29:44 · 167 阅读 · 0 评论 -
两个泛型为对象的List,根据对象的某些属性来取差集
通过Java 8 新特性Stream和Lambda 表达式实现/***user对象*/public class User{ private String id; private String name; private String age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return原创 2020-06-04 12:55:43 · 1348 阅读 · 0 评论