-
【笔记】异常
第一章 异常1.1 异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.1.2 异常体系异常机制...…
-
【笔记】字节流、字符流
主要内容 IO流 字节流 字符流 异常处理 Properties第一章 IO概述1.1 什么是IO生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。Jav...…
-
【笔记】并发编程2
4.共享模型之管程4.1 共享带来的问题小故事【P51】Java的体现两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?static int counter = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { for (int i = 0; i < 5000;...…
-
【笔记】并发编程1
1.概述2.进程与线程概念、二者关系、如何执行、并行与并发、两者对比应用以调用方角度来讲,如果需要等待结果返回,才能继续运行就是同步不需要等待结果返回,就能继续运行就是异步注意:同步在多线程中还有另外一层意思,是让多个线程步调一致1) 设计 多线程可以让方法执行变为异步的(即不要巴巴干等着)比如说读取磁盘文件时,假设读取操作花费了 5 秒钟,如果没有线程调度机制,这 5 秒 cpu 什么都做不了,其它代码都得暂停…2) 结论 比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新...…
-
自学千万不要煮夹生饭
自学千万不要煮夹生饭这周是被学业压力和就业压力支配的一周,周三开题,周二周四面试,今天周五抓紧看论文写论文。学术我没有什么追求,无非为了毕业,不是做科研的材料,而且越做到最后越觉得非我个人的力量能在这个课题上做出突破,毕竟技术新,好多东西不成熟,需要投入时间…面试虽然面的稀碎,但是还是开心大于难过的,毕竟面试就是对自己认知的过程,而且本身就是一个双选的过程,我更希望在面试中学到东西,交流真的是学东西的好方法,但是前提是自己能够匹敌,所以还是要好好准备。昨天面完之后,当时没录屏,忘记了一部分...…
-
【笔记】JVM之垃圾回收器
JVM-17-垃圾回收器1.GC分类与性能指标垃圾回收器概述●垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。●由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。●从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本的新特性: 语法层面: Lambda表达式、switch、 自动装箱、自动拆箱、enum、 <>、… API层面: Stream API、新的日期时间、Optional、 Strin...…
-
【笔记】JVM之直接内存
JVM-11-直接内存概述 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域 直接内存是在Java堆外的、直接向系统申请的内存空间 来源于NIO(NIO (New IO / Non-Blocking IO)),通过存在堆中的DirectByteBuffer操作Native内存 /** * IO NIO (New IO / Non-Blocking IO) * byte[] / ch...…
-
【笔记】JVM之执行引擎
1.执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本...…
-
【笔记】JVM之对象的实例化、内存布局与访问定位
JVM-10-对象的实例化、内存布局与访问定位大厂面试题美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:二面:JAVA对象头里有什么?内容:1.对象的实例化2.对象内存布局3.对象的访问定位1.对象的实例化 使用new关键字 } → 调用了构造函数 使用Class类的newInstance方法 } → 调用了构造函数 使用Constructor类的newInstanc...…
-
【笔记】JVM之垃圾回收相关算法
JVM-15-垃圾回收相关算法-未完1.标记阶段:引用计数算法垃圾标记阶段:对象存活判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。 那么在JVM中究竟是如何标记-一个死亡对象呢?简单来说,当-一个对象已经不再被任何的存活对象继续引用时,就可以宜判为已经死亡。 判断对象存活一般有两种方式:...…
-
【笔记】JVM之垃圾回收概述
JVM-14-垃圾回收概述1.什么是垃圾 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: ➢哪些内存需要回收?➢什么时候回收?➢如何回收? 垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用...…
-
【笔记】JVM之StringTable
1.String的基本特性 String:字符串,使用一对”“引起来表示。 String s1 = “hello world”;//字面量的定义方式 String s2 = new String (“hello”) ; String声明为final的, 不可被继承 String实现 了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 S...…
-
【笔记】JVM之垃圾回收相关概念
JVM-16-JVM垃圾回收相关概念1.System.gc()的理解●在默认情况下,通过System. gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。●然而system.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。●JVM实现者可以通过System. gc ()调用来决定JVM的GC行为。 而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦...…
-
【笔记】JVM之堆(二)
3.年轻代与老年代 存储在JVM中的Java对象可以被划分为两类: 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速 另外一类对象的声明周期却非常长,在某些极端的情况下还能够与JVM的生命周期保持一致 Java堆区进一步细分的话,可以划分为年轻代(YoungGen)和老年代(OldGen) 其中年轻代又可以划分为Eden空间、Survivor0空间和Survivor1空间(有时也叫做from区、to区)NewRatio 的值是老年代...…
-
【笔记】JVM之堆(一)
栈管运行,堆管存储1.堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域 Java堆在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的 (虚拟内存) 所有的线程共享Java堆,在这里还可以划分线程私有的缓存区(Thread Local...…
-
【笔记】JVM之本地方法栈
本地方法栈(Native Method Stack) Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈,也是线程私有的 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没...…
-
【笔记】JVM之虚拟机栈
也叫Java栈1.概述虚拟机栈出现的背景由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的优点:跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令Q:有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆和Java栈(stack)?为什么?内存中的栈和堆栈是运行时的单位,而堆是存储的单位即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储...…
-
【笔记】JVM之本地方法接口
本地方法接口什么是本地方法?简单地讲,一个Native Method就是 一个Java调用非Java代码的接口。一个Native Method是这样 一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C”告 知C++编译器去调用一个C的函数。 “A native method is a Java method whose implementation is provided by...…
-
【笔记】JVM之运行时数据区概述及线程
运行时数据区概述及线程1.概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。上图,灰色的为单...…
-
【笔记】JVM之类的主动使用与被动使用
类的主动使用与被动使用在JVM中表示两个class对象是否为同一个类存在两个必要条件: 类的完整类名必须一致,包括包名 加载这个类的ClassLoader(指ClassLoader实例对象)必须相同。换句话说,在JVM中,即使这两个类对象(class对象)来源于同一个class文件,被同一个虚拟机所加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。对类加载器的引用JVM必须知道一个类型是由启动加载器加载的还是由用户类加载器加载的。如果一个类型是由用...…