![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA学习
文章平均质量分 92
一入猿门深似海
我想要一头飘逸的秀发!
展开
-
JAVA虚拟机JVM 4
JVM 4 内存分配和垃圾回收策略内存分配和垃圾回收策略对象优先在Eden中分配大对象直接进入老年代长期存活的对象将进入老年代动态对象年龄判断理解GC日志内存分配和垃圾回收策略Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。对象的内存分配,从概念上讲,应该都是在堆上分配(而实际上也 有可能经过即时编译后被拆散为标量类型并间接地在栈上分配)。在经典分代的设计下,新生对象通常会分配在新生代中,少数情况下(例如对象大小超过一定阈值)也可能会直原创 2021-06-22 17:06:24 · 158 阅读 · 0 评论 -
JAVA虚拟机JVM 3
JVM 3 垃圾回收器垃圾回收器垃圾回收器介绍Serial收集器(新生代收集器,串行GC)ParNew收集器(新生代收集器,并行GC)Parallel Scavenge收集器(新生代收集器,并行GC)Serial Old收集器(老年代收集器,串行GC)Parallel Old收集器(老年代收集器,并行GC)CMS收集器(老年代收集器,并发GC)Garbage First 收集器(唯一的全区域的垃圾回收器)垃圾回收器垃圾回收器介绍如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Ja原创 2021-06-22 16:40:32 · 151 阅读 · 0 评论 -
JAVA面向对象-----类加载机制
类加载机制类加载机制介绍类的加载过程加载什么时候会发生类初始化?类加载器的作用类加载机制介绍Java虛拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虛拟机的类加载机制。与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略让Java语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销,但是却为Java应用提供了极高的扩展性和灵活性原创 2021-06-22 09:14:33 · 126 阅读 · 0 评论 -
JAVA虚拟机JVM 2
JVM 2 垃圾回收算法垃圾收集Garbage CollectionGC简介如何判断对象已“死”?引用计数算法可达性分析算法生存还是死亡?再谈引用回收方法区垃圾回收算法标记-清除算法(老年代)标记-复制算法(新生代)标记-整理算法(老年代)分代收集理论垃圾收集Garbage CollectionGC简介JAVA语言经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解垃圾收集和内存分配?答案很简单:当需要排查各种内存溢出、内存泄漏问题原创 2021-06-21 17:15:36 · 245 阅读 · 0 评论 -
JAVA虚拟机JVM 1
JVM 1初始JVMJAVA虚拟机简介了解Java程序的编译过程JAVA内存区域与内存溢出异常运行时数据区域内存溢出初始JVMJAVA虚拟机简介JAVA虚拟机:Java Virtual Machine,简称JVM。JVM可理解为是一台被定制过的现实当中不存在的计算机,模拟硬件执行字节码指令。虚拟机:指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual BoxJVM和其他两个虚拟机的区别:VMwave与Virtual原创 2021-06-21 17:05:14 · 160 阅读 · 0 评论 -
JAVA面向对象-----反射机制
JAVA Reflection 反射机制面试题:Java中创建对象大概有这几种方式?静态语言 / 动态语言什么是反射机制?反射机制的原理反射的优缺点反射的用途类的加载过程什么时候会发生类初始化?类加载器的作用JAVA中基本数据类型的Class是什么?反射机制常用的API反射机制获取类的方法通过反射获取运行时类的完整结构获取Class对象后能做什么?创建类的对象通过反射调用对象的方法通过反射操作属性反射操作泛型反射操作注解面试题:Java中创建对象大概有这几种方式?思考:在讲反射之前,先思考一个问题,ja原创 2021-06-17 17:24:37 · 948 阅读 · 8 评论 -
JAVA面向对象-----注解
JAVA的注解Annotation注解什么是注解?预置注解元注解注解的用处:注解的好处:注解的坏处:自定义注解第一步:定义注解第二步:配置注解第三步:解析注解Annotation注解什么是注解?注解:Annotation是从JDK5.0开始引入的新技术。可以将它理解成“元数据”,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码:@Overridepublic String toString() { return "This is String Represent原创 2021-06-16 10:46:40 · 182 阅读 · 0 评论 -
JAVA面向对象-----多线程 7
synchronized优化原创 2021-06-15 14:20:01 · 1208 阅读 · 1 评论 -
JAVA面向对象-----多线程 6
常见锁策略锁的类型悲观锁/乐观锁公平锁/非公平锁可重入锁独占锁/共享锁自旋锁面试题锁的类型悲观锁/乐观锁乐观锁乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。我们可以这样理解,乐观锁就是用乐观的心态看待线程安全(并发冲突)的问题,直接修改共享变量,基于某些机制,要么直接修改成功(没有冲突),要么修改失败(通过返回值可以知道,一般是boolean) 。不管成功还是失败,原创 2021-06-14 17:28:59 · 1293 阅读 · 1 评论 -
JAVA面向对象-----多线程 5
相关知识补充volatile关键字JAVA的内存模型volatile关键字通过“单例模式”了解禁止指令重排序volatile关键字JAVA的内存模型Java内存模型由Java虚拟机规范定义,用来屏蔽各个平台的硬件差异。简单总结成以下三点:所有变量储存在主内存。每条线程拥有自己的工作内存,其中保存了主内存中线程使用到的变量的副本。线程不能直接读写主内存中的变量,所有操作均在工作内存中完成。线程,主内存与工作内存的交互关系如下图所示:内存间的交互操作有很多,和volatile有关的操作有:原创 2021-06-09 18:46:51 · 163 阅读 · 1 评论 -
JAVA面向对象-----多线程 4
多线程 4JDK5.0新增线程创建方式实现Callable接口。使用线程池JDK5.0新增线程创建方式实现Callable接口。Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。●与使用Runnable相比,Callable功能 更强大些➢重写call()方法,相比run()方法, 可以有返回值➢方法可以抛出异常➢支持泛型的返回值➢需要借助FutureTask类, 比如获取返回转载 2021-05-21 21:40:24 · 68 阅读 · 0 评论 -
JAVA面向对象-----多线程 3
多线程 3线程的死锁问题什么是死锁?如何解决死锁?死锁演示同步锁Lock(锁)的概念代码演示synchronized 和 lock 的异同?练习线程的通信概述线程通信涉及的方法练习经典问题:生产者/消费者问题线程的死锁问题什么是死锁?不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁;出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。如何解决死锁?➢ 专门的算法、原则➢ 尽量减少同步资源的定义➢ 尽量避免嵌套同步死原创 2021-05-19 21:43:49 · 120 阅读 · 4 评论 -
JAVA面向对象-----多线程 2
多线程 2线程的生命周期线程的5种状态线程的同步线程安全为什么会有线程安全问题?线程安全问题的解决方法线程的生命周期线程的5种状态要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:新建: 当一个Thread类或其 子类的对象被声明并创建时,新生的线程对象处于新建状态;就绪: 处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源原创 2021-05-19 16:44:34 · 90 阅读 · 1 评论 -
JAVA面向对象-----多线程 1
多线程 1基本概念程序进程线程单核CPU / 多核CPU并行与并发多线程的优点何时需要多线程?线程的创建和使用Thread中的常用方法:方式一:继承Thread类步骤例1:遍历100以内的所有偶数。例2:创建两个分线程,分别遍历100以内的所有偶数和所有奇数。Thread的匿名子类方式二:实现Runnable接口步骤例1:创建三个窗口卖票,总票数100张。(方式一实现)例2:创建三个窗口卖票,总票数100张。(方式二实现)Thread的优先级线程的调度调度策略线程的优先级等级优先级分类涉及的方法说明基本概原创 2021-05-19 10:10:29 · 244 阅读 · 1 评论 -
JAVA面向对象-----IO流(二)
JAVA中的IO流(二)JAVA中的IO流(一)OjectInputStream / ObjectOutputStreamJAVA中的IO流(一)OjectInputStream / ObjectOutputStream对象流:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把JAVA中的对象写入到数据源中,也能把对象从数据源中还原回来。序列化 :用ObjectOutputStream类保存基本类型数据或对象的机制。反序列化:用ObjectInputStream类读取基本类原创 2021-05-17 11:47:06 · 158 阅读 · 0 评论 -
JAVA面向对象-----IO流
I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。这里的输入/输出都是相对的,所以我们一定要明确站位,我们编程中所讲到的输入/输出都是以“内存”的角度看来看的 ~ ~输入(Input):读取外部数据(磁盘,光盘等存储设备的数据)到程序中;输出(Output):将程序(内存)数据输出到磁盘,光盘等存储设备中。JAVA程序中对于数据的输入/输出操作以“流(stream)”的形式进行。流的分类:按操作数据单位不同分为 : 字节流原创 2021-05-15 20:00:13 · 258 阅读 · 1 评论 -
JAVA-----String类
一.创建字符串常见的构造 String 的方式// 方式一String str = "Hello World";// 方式二String str2 = new String("Hello World");// 方式三char[] array = {'a', 'b', 'c'};String str3 = new String(array);注意:String是引用类型!二.字符串的比较String str1 = "Hello";String str2 = "Hello"; Sys原创 2021-02-08 21:49:39 · 193 阅读 · 0 评论 -
JAVA基础练习-----实现一个简单的控制台“图书管理系统”
核心需求:1.用户能够登录到系统上。用户分成两个角色:管理员,普通用户管理员功能:1.查阅某个书籍的信息2.增加书籍3.删除书籍4.查看所有书籍列表5.退出程序普通用户功能:1.查阅某个书籍的信息2.借阅书籍3.归还书籍4.退出程序面向对象的核心之一,结合需求,找到“对象”。从需求中找一些重要的名词:如上述需求中的书,管理员,普通用户,书籍列表;与此同时,一些动词可以理解成“操作”也可以封装成一个类,比如:增加书籍,删除书籍,退出程序。封装也是面向对象的核心之一,在设计Book原创 2021-02-02 10:05:52 · 3498 阅读 · 1 评论 -
JAVA面向对象-----类和对象(下)
包包的定义包 (package) 是组织类的一种方式。使用包的主要目的是保证类的唯一性。例如,你在代码中写了一个 Test 类, 然后你的同事也可能写一个 Test 类, 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过。包的访问权限控制我们已经了解了类中的 public 和 private。private 中的成员只能被类的内部使用。如果某个成员不包含 public 和 private 关键字, 此时这个成员可以在包内部的其他类使用, 但是不能在包外部的类使用。static关键字st原创 2021-02-01 12:28:02 · 90 阅读 · 0 评论 -
JAVA面向对象-----类和对象(上)
类和对象1.什么是面向对象?Java是一门纯面相对象的语言(Object Oriented Program,继承OOP),在面相对象的世界里,一切皆为对象。面相对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面相对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好面向对象相当于一个编程“范式”,就是要先把业务中的一些概念提取出来,作为“对象”,然后把每个对象的属性和行为都安排好,然后再去组织业务流程。2.面向对象编程的好处有哪些?易维护采用原创 2021-02-01 12:27:28 · 247 阅读 · 0 评论 -
JAVA-----引用(reference)和对象(object)
引用类型1.认识引用(reference)和对象(object)示例代码1:String str = "Hello World"; int[] arr = { 1, 2, 3, 4, 5 };这里的 str 的类型是 String 类型的引用;该引用指向了一个String 类型的对象。这里的 arr 的类型是 int[] 类型的引用;该引用指向了一个元素类型是 int 的数组类型对象。2.引用和对象之间的关系通过引用可以对对象施加影响。我们通常把这个关系称为,该引用指向该对象。3.引用原创 2021-01-26 12:41:37 · 986 阅读 · 0 评论 -
JAVA-----代码中的“异常”
程序异常1.初识异常我们曾经的代码中已经接触了一些 “异常” 了. 例如:除以 0System.out.println(10 / 0);执行结果:Exception in thread “main” java.lang.ArithmeticException: / by zero数组下标越界int[] arr = {1, 2, 3};System.out.println(arr[100]);执行结果:Exception in thread “main” java.lang.Arr原创 2021-01-26 12:37:39 · 241 阅读 · 0 评论 -
JAVA面向对象---多态
多态在学习多态之前,我们需要认识这样一个概念:继承是实现多态的一个前提。多态能够帮助我们解决大量的分支语句的情况。一.基础语法1.向上转型一个父类的引用指向了一个子类的对象(看起来好像是把子类的引用转成了父类的引用)。示例代码1://Animal.javapublic class Animal {}//Cat.javapublic class Cat extends Animal {}//test.javapublic class Test { public stati原创 2021-01-22 16:09:41 · 309 阅读 · 1 评论 -
JAVA面向对象---继承
一.基本概念继承(inheritance)机制:继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取。例如:鸟和猫都属于动物,那么我们就可以抽取出一些共性的内容。我们从鸟和猫身体提取出共性:名字这一属性,能够吃东西这一方法,并且将它们提取到动物类中。鸟类和猫类继承了动物类,那么就不需要在这两类当中再定义,姓名属性和吃原创 2021-01-20 19:22:04 · 368 阅读 · 0 评论