![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 开发
iWay7
https://github.com/iWay7/
展开
-
Java 中引用方式
1、强引用:强引用与可用内存和是否发出 GC 无关,系统宁愿抛出 OutOfMemory 异常也不会去回收。一般的实现都是强引用。2、软引用:软引用对象会在系统内存不够且发生 GC 的情况下被回收。实现方式例如:SoftReference<Object> srObject = new SoftReference<>(new Object());软引用经常被应用在缓存的设计当...原创 2018-04-08 11:04:38 · 125 阅读 · 0 评论 -
基于栈虚拟机和基于寄存器虚拟机的比较
1、指令条数:栈式>寄存器式,例如一个加法运算 a = b + c 的字节码指令:栈式:I1: LOAD CI2: LOAD BI3: ADD I4: STORE A寄存器式:I1: add a, b, c2、代码尺寸:栈式<寄存器式,这个在 Android 开发中会经常遇到,众所周知传统的 JVM 是基于栈的,而 Android 中的Dalvik 虚拟机则是基于寄存器的,对于同...原创 2018-04-08 10:33:32 · 397 阅读 · 0 评论 -
Java 中的 CountDownLatch, CyclicBarrier, Semaphore
1、CountDownLatchCountDownLatch 主要用于一个线程需要等到其他线程完成任务后继续执行的场景。CountDownLatch 不可重用。示例:package site.iway;import java.util.Random;import java.util.concurrent.CountDownLatch;public class Main { pr...原创 2018-04-08 10:05:05 · 155 阅读 · 0 评论 -
Java 的四个基本特性
1、抽象抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。2、封装通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装。我们编写一个类就是对数据和数据操作的封装。可以说,封装就...原创 2018-04-11 10:31:51 · 861 阅读 · 0 评论 -
Java 中 Error 和 Exception 的区别
1、Throwable 类Error 和 Exception 都继承自 Throwable 类,因此事实上他们都是可以被 try/catch 的。2、语义上区别Error 通常代表很严重的错误,程序无法处理的那种,例如 VirtualMachineError 等。Exception 通常代表程序可以处理的异常,例如 IOException 等。3、Exception 处理Exception 中有一...原创 2018-04-11 10:47:33 · 132 阅读 · 0 评论 -
Java 中的 String,StringBuffer,StringBuilder
1、StringString 是一个由 final 关键字修饰的类,内部维护一个同样由 final 修饰的 char 数组。对于 String 的操作,本质上都是对内部 char 数组的操作。因此在内存中,String 是不可变的。这么做带来的好处在于,提高性能以及可能减少一定的内存使用。在编译阶段,String 常量会被放在常量池中,编译器检测到相同的 String 常量,会让它们指向同一个常量...原创 2018-04-11 11:27:37 · 140 阅读 · 0 评论 -
Java 垃圾回收算法
1、标记-清除标记:从根对象开始遍历所有对象并标记,遍历完成的时候,未被标记的对象就是垃圾对象。清除:从内存中删除未被标记的对象。这种算法简单,但是效率比较低,又会产生内存碎片。2、标记-整理标记:从根对象开始遍历所有对象并标记,遍历完成的时候,未被标记的对象就是垃圾对象。整理:将被标记的对象压缩到一块内存区域,然后清理内存边界到该区域的其他空间。这种算法主要是为了解决标记-清除带来的内存碎片的问...原创 2018-04-11 17:10:42 · 168 阅读 · 0 评论 -
Java 类加载过程
1、加载加载的过程本质上是一个读取二进制数据的过程。可以是文件,网络数据,内存中的数据等,这一阶段是可以自定义的。加载过程中会在堆中初始化一个 class 对象。2、验证验证就是验证这堆二进制数据是不是有效的,就是这个 class 数据是否可以载入虚拟机。例如验证文件是否是 0xCAFEBAB 开头,再验证版本号是否被当前 JVM 支持,然后再校验内部的变量等等是否符合规范。3、准备准备阶段会在内...原创 2018-04-12 10:45:32 · 454 阅读 · 0 评论