读书笔记
Mutou_ren
这个作者很懒,什么都没留下…
展开
-
JVM垃圾回收算法
finalize()由于垃圾回收期只知道回收new分配的内存,其他内存不知道如何释放,因此定义该方法,其功能假定为:一旦垃圾回收器准备好释放对象占用的储存空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。java语言规范并不能保证该方法一定能及时的调用甚至无法保证被调用,因为垃圾回收动作仅跟内存有关,有可能垃圾回收永远不会进行。对...原创 2018-12-04 11:07:39 · 212 阅读 · 0 评论 -
Java中的锁及等待通知机制
synchronizedsynchronized是一种重量级锁,表现形式有三种对于普通同步方法,锁是当前的实例对象对于静态同步方法,锁是类的Class对象对于同步方法块,锁是synchronized括号里配置的对象每个对象都有一个minitor与之关联,当一个minitor被持有后,它将处于锁定状态,synchronized的实现原理即是基于进入Minitor对象来实现方法同步和代码...原创 2018-12-17 22:41:34 · 1454 阅读 · 0 评论 -
多态、接口、内部类
域访问操作不是多态的,当对象使用多态向上转型时,访问的域将是父类的域,而非理想中的通过多态引用子类的域。如对于下面代码:Class Sup{public int a = 0;}Class Sub extend sup{public int a = 1;main(){Sup s = new Sub();s.a == 0;//true}}...原创 2018-12-11 21:14:16 · 144 阅读 · 0 评论 -
异常
抛出异常后会发生什么?使用new在堆上创建异常对象当前执行路径被终止,并从当前运行环境中弹出异常对象的引用异常处理程序接管程序,开始找异常处理程序使程序从错误中恢复,使程序继续执行或换一种方式执行异常可以将每件事都当做一个事物处理,当某个环节出错时,可以进行放弃整个计算,进行错误恢复。当方法内部抛出异常时,该方法将提前结束,若想让方法继续运行下去,需要设置try块对异常进行捕捉。c...原创 2018-12-17 14:22:58 · 132 阅读 · 0 评论 -
Java中的线程
Runnable接口定义了任务,但若想实现线程行为,必须将任务附着在线程上,因此创建线程Thread并将一个Runnable对象交给该线程,启动thread的start对象将为该线程执行必须的初始化操作,并调用Runnable对象的run方法执行任务。...原创 2018-12-20 20:34:14 · 130 阅读 · 0 评论 -
Java中的并发工具及框架
并发工具类CountDownLatch允许一个或多个线程等待其他线程完成操作,比传统的join机制更好。其构造函数接收一个int类型的参数作为计数器(初始化后无法改变该值),即要等待的线程数量(也可以是一个线程的多个执行步骤)。每次调用countDown都会使计数器减一,await()方法会一直阻塞当前线程知道计数器归零,同时该方法也提供超时机制。CyclicBarrier同步屏障所有线...原创 2018-12-20 20:24:29 · 440 阅读 · 0 评论 -
JVM类加载机制
虚拟机把描述类的Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最后形成能够被虚拟机直接使用的Java类型,叫做JVM的加载机制。类的生命周期加载验证准备解析初始化使用卸载其中验证、准备和解析为连接过程;解析有可能在初始化之后进行,这是因为支持Java的运行时绑定。必须进行初始化的五个场景有且仅有以下五个场景,若类没有进行初始化,则必须立即初始化。遇到...原创 2018-12-18 19:01:18 · 137 阅读 · 0 评论 -
访问权限控制及复用类
访问权限控制一个java源代码文件只能有一个public类,该类必须与文件名相同,但编译时,每个class都有一个对应的.class文件。package语句必须是文件中除注释以外的第一句程序代码。如果父类的某个方法或者成员属性拥有包访问权限,而子类与父类不在同一个包下,则子类无法使用这些方法或成员属性。类的访问权限只有包访问权限或者public,如果不想让别的类使用,让构造器私有化即可。...原创 2018-12-03 22:04:07 · 195 阅读 · 0 评论 -
自动内存管理机制
虚拟机运行时数据区程序计数器虚拟机栈/本地方法栈方法区堆区程序计数器每个线程都有一个独立的计数器,并与其他线程隔离,通过改变计数器的值进行字节码指令的操作,实现分支、跳转、循环、异常处理、线程恢复……等功能。虚拟机栈线程私有,生命周期与线程相同,每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口信息等。每个方法的调用(入栈)直至执行完成(出栈...原创 2018-12-03 16:36:00 · 290 阅读 · 0 评论 -
操作符和流程控制
1. +号可以表示数字运算、字符串拼接、字符串转换(String+一个非String)的功能2. 逻辑操作符的短路——是指计算一串逻辑运算时如果前面部分已经满足了要求,后面的部分可能不再计算3. int a = 0xf; char b = 0xf; byte c = 0xf; short d = 0xf; ...原创 2018-11-28 21:28:38 · 146 阅读 · 0 评论 -
编程思想—初始化
1.构造方法没有返回值,与返回void是不同的,虽然new表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值2.方法重载根据方法参数的类型和数量不同进行区分,与方法的返回值和权限修饰符无关。对于基本类型的方法重载,由于基本类型能够自动从一个较小的类型提升到一个较大的类型,因此当入参类型小于参数声明类型时,能够自动提升(如入参为int,声明为float,int会自动提升为floa...原创 2018-12-02 22:23:54 · 245 阅读 · 0 评论 -
类文件结构
深入理解Java虚拟机类文件结构虚拟机虚拟机作为一个通用的、与系统无关的执行平台,不与包括Java在内的任何一门语言绑定,只与.class文件关联,即无论任何语言都可以表示为虚拟机所理解的.class文件。.class任何一个.class文件都对应着一个唯一的类或接口的定义信息,但反过来并非如此,某些类或接口可以通过类加载器直接生成。class文件是一种以8字节为基础单位的二进制流,...原创 2018-12-05 17:12:38 · 145 阅读 · 0 评论 -
JVM垃圾收集器
HotSpot垃圾回收器在垃圾回收语境下:并行:多个垃圾回收线程并行工作,用户线程处于等待并发: 垃圾回收线程与用户线程同时执行(不一定并行),两个线程运行在不同CPU上。新生代收集器Serial单线程收集器,工作时会暂停所有工作线程,虽然会停顿时间较长但简单高效。client下默认的新生代收集器,因为桌面端内存不大,停顿时间很短。ParNewSerial的多线程版本,se...原创 2018-12-04 15:45:39 · 412 阅读 · 0 评论 -
重构
函数提炼函数将大函数提炼成多个小函数,当某个代码片需要注释解释功能时,既可以被提取为一个单独的函数。如果有局部变量,若局部变量没有被修改,可以直接当做参数传入;如果被修改,可以当做返回值。若不止一个被修改,则分解为多个函数。内联函数如果函数体的解释性比函数名更好,且复用不高,则取消函数,将函数体插入到代码片中。内联临时变量如果有个临时变量只被赋值了一次,起作用的时候妨碍了...原创 2019-03-19 19:56:58 · 190 阅读 · 0 评论