- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 Java文件IO
在Java中,可从中读出一系列数据的对象称为“输入流”,而能向其中写入一系列数据的对象称为“输出流”。Java的输出/输入都是通过继承抽象类InputStream和OutputStream(面向字节)、Reader和writer(面向字符)来实现的。文件IO基本操作在java.io包中流的操作主要有字节流、字符流两大类,两者都有输入和输出的操作。在字节流中输出数据主要使用OutputStream类...
2018-05-07 10:22:44
286
1
原创 抽象工厂模式
感谢https://blog.youkuaiyun.com/h28496/article/details/44258601和https://blog.youkuaiyun.com/lingfengtengfei/article/details/12374469看图如果通过工厂方法模式来创建上图9个对象,需要建立一个抽象的工厂类PhoneFactory。然后再用9个子工厂类去实现它。如果通过抽象工厂模式实现多个抽象产品类p...
2018-05-06 22:23:10
219
原创 工厂模式
简单工厂模式的缺点:是没有遵守开放—封闭原则。所谓的“开放-封闭”原则就是开放接口,封闭修改。如果将来需要添加一个开方的算法,那么,在简单工厂模式中,就必须在简单工厂类中添加相应的判断语句!另外,在简单工厂类中利用了Switch语句,这对程序的扩展本身就不不利。工厂模式优点:工厂模式是简单工厂模式的进一步抽象和推广。它遵循了“开放—封闭”原则。抽象工厂有多个子工厂,每个子工厂只生产一个特定的产品。...
2018-05-06 20:51:51
199
原创 简单工厂模式
为什么需要工厂模式?有一组类似的对象需要创建;在编码时不能预见需要创建哪种类的实例;系统需要考虑扩展性,不应依赖于产品类的实例如何被创建、组合和表达的细节。一个抽象产品public interface Phone { public void whoami();}多个具体产品public class Phone_16G implements Phone{ @Override public ...
2018-05-06 18:39:13
163
原创 单例模式
有时候有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。如果创造多个实例,就会导致许多问题,比如:占用过多资源、不一致的结果等。因此,需要保证整个应用中某个实例有且只有一个。懒汉模式public class Singleton2 { //1.将构造方式私有化,不允许外边直接创建对象 private Singleton2(){ } //2.声明类的唯一实例,使用p...
2018-05-06 14:54:56
143
原创 Java的new关键字
A a = new A();这句话为A的对象创建了一个实例,在内存里开辟了两个空间:一块空间在堆,存放new A()这个对象;另一块空间在栈,存放a,a的值即new A()这个对象的内存地址。Object o;声明了一个引用,存放在栈中,类型是Object,值为null,没有指向任何一个对象。下面的例子中Dog是Animal的子类,main方法中各个对象能且仅能调用给出的方法public clas...
2018-05-05 11:48:41
4100
原创 DNS用的是TCP协议还是UDP协议
DNS占用53号端口,同时使用TCP和UDP协议。那么DNS在什么情况下使用这两种协议?DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。DNS区域传输的时候使用TCP协议:1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。...
2018-04-28 08:32:58
42675
1
原创 使用字符串常量加锁
String常量池的缓存功能对以下代码可能出现非预期情况public class StringLock { public void method() { //new String("字符串常量") synchronized ("字符串常量") { try { while(true){ System.out.println("当前线程 : " + Thread....
2018-04-17 10:06:57
919
原创 类装载器
class装载验证流程加载装载类的第一个阶段取得类的二进制流转为方法区数据结构在Java堆中生成对应的java.lang.Class对象链接——验证目的:保证Class流的格式是正确的-文件格式的验证是否以0xCAFEBABE开头版本号是否合理-元数据验证是否有父类继承了final类?非抽象类实现了所有的抽象方法-字节码验证 (很复杂)运行检查栈数据类型和操作码数据参数吻合跳转指令指定到合理的位置...
2018-04-15 13:55:07
182
原创 GC参数
串行收集器最古老,最稳定,效率高,可能会产生较长的停顿。-XX:+UseSerialGC新生代、老年代使用串行回收新生代复制算法老年代标记-压缩并行收集器ParNew-XX:+UseParNewGC新生代并行老年代串行Serial收集器新生代的并行版本复制算法多线程,需要多核支持-XX:ParallelGCThreads 限制线程数量Parallel收集器类似ParNew新生代复制算法老年代 标记...
2018-04-15 12:47:44
259
原创 GC算法与种类
GC概念Garbage CollectionJava中GC对象是堆空间和永久区GC算法——引用计数法引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。引用计数法的问题:引用和去引用伴随加法和减法,影响性能;很难处理循环引用。——标记清除法标记-清除算法是现代垃圾回收算...
2018-04-15 12:26:10
155
原创 常用JVM配置参数
Trace跟踪参数打开GC方式:1.-verbose:gc;2.-XX:+printGC-XX:+PrintGCDetails打印GC详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log指定GC log的位置,以文件输出,帮助开发人员分析问题-XX:+PrintHeapAtGC每次一次GC后,都打印堆信息-XX:+TraceClassLoad...
2018-04-14 22:58:11
123
原创 JVM运行机制
JVM启动流程Java XXX装载配置根据配置寻找JVM.dll初始化JVM获得JNIEnv接口找到main方法并运行 根据当前路径和系统版本寻找jvm.cfgJVM.dll为JVM主要实现JNIEnv为JVM接口,findClass等操作通过它实现 JVM基本结构PC寄存器:——每一个线程拥有一个PC寄存器——在线程创建时创建——指向下一条指令的地址——执行本地方法时,值为undefined方法...
2018-04-14 17:30:15
222
原创 初识JVM
JVM:Java Virtual Machine。虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。例VMWare、Visual Box、JVM。(其中VMWare或者Visual Box都是使用软件模拟物理CPU的指令集;JVM使用软件模拟Java字节码的指令集)Java语言规范语法定义词法结构类型和变量JVM规范JVM主要定义二进制class文件和JVM指...
2018-04-14 14:57:28
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人