![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 67
qq_16899143
这个作者很懒,什么都没留下…
展开
-
ThreadPoolExecutor源码研读
原文为https://www.cnblogs.com/huangjuncong/p/10031525.html,因为博主加了注释所以会使用一些他的图片,侵删。对于博主没有讲到的部分会使用jdk源码的截图为什么要用一个ctl记录线程状态和线程个数?因为需要得到一个对这两个量的同一快照,如果使用两个变量则需要一个锁,而使用一个变量不需要(赋值操作是原子的,赋值后在对副本进行解析,可以保证是同一个的快照)。这种设计非常巧妙,值得学习线程池状态:RUNNING:运行状态,接受任务且处理阻塞队列中的任..原创 2021-10-03 21:12:21 · 139 阅读 · 0 评论 -
Java并发编程实战 第三章 对象的共享
主要讲了两种构造时可能出现的问题,一种是未构造完成的对象逃逸,一种是由于JVM重排指令导致的状态异常,个人感觉书中讲解的不是很透彻下面是对象逃逸的一个例子,注意final域也面临对象逃逸问题,虽然在构造器中无法使用未赋值的final域,但是在别的线程调用对象时可以看到未赋值的final域,此时对象还未构造完public class Main { Main(int i,int j) throws InterruptedException { //! System.out.pr原创 2021-03-26 18:39:51 · 89 阅读 · 0 评论 -
深入理解JVM 第八章 虚拟机字节码执行引擎
一个栈帧需要分配多少内存并不会受到程序运行时变量的影响,只取决于源码和虚拟机实现方式记录问题:书中说局部变量表的复用可能会导致垃圾回收不及时,做实验看一下static void test1() { { byte[] placeholder = new byte[1024*1024*64]; } System.gc(); }这一段代码用-verbose:gc -XX:+UseSerialGC -X..原创 2021-03-11 19:59:27 · 67 阅读 · 0 评论 -
深入理解JVM 第七章 虚拟机类加载机制
好久不写,但是这章真的重要虚拟机规范中对于什么时候加载类并没有一个统一标准,但是初始化是有且只有六种情况才会进行,详见书中263页,下面记录几个问题和重点------------------------------------------------------------读取或设置一个类型的静态字段时会初始化该类,但不包括被final修饰的在编译器把结果放入常量池的静态字段:这里暗含了一个知识点,只有基础类型和String会在编译器被标注位ConstantValue放入常量池,也就是说其他类型原创 2021-03-09 21:26:30 · 55 阅读 · 0 评论 -
深入理解JVM 第三章垃圾收集器与内存分配策略
引用计数算法:为每个对象添加一个引用计数器,每次被引用就加一,这样做需要额外的处理才能解决循环引用等问题可达性分析算法:以GC Roots为起使点集,如果某个对象不可达则证明此对象不再被引用之前一直搞不明白软和弱的区别软引用:在系统发生内存溢出之前会对软引用进行回收弱引用:比软引用更弱一点,被弱引用关联的对象只能存活到下次垃圾回收虚引用:无法使用虚引用得到对象实例,只能在其对象被回收时收到一个系统通知对象收集:当一个对象被判定GC Roots不可达时会被第一次标记,之后如..原创 2021-03-01 12:32:53 · 80 阅读 · 2 评论 -
深入理解JVM 第二章 内存区域
程序计数器:标记当前执行的字节码行号,控制程序执行顺序。每个线程拥有自己的程序计数器Java虚拟机栈:每个Java方法执行时都会创建一个栈帧,用于保存局部变量表,操作数栈,动态连接,方法出口等信息。进入方法后需要在栈帧中分配多大的空间是确定的,不会在方法执行时改变。线程私有本地方法栈:与虚拟机栈类似,执行本地方法时分配Java堆:所有对象实例几乎都分配在堆中,被所有线程共享方法区:储存被加载的类型信息,常量,静态变量等,被所有线程共享运行时常量池:方法区的一部分,用来保存运行时产生的字面原创 2021-03-01 10:34:42 · 51 阅读 · 0 评论 -
设计模式:可复用面向对象软件基础 第三章(1)
这本书没有办法划重点,每一句话都让人觉得精彩,适合反复阅读,下面说些自己的理解。网上很多文章认为 Factory Method 与 Abstract Factory 之间的区别在于,后者在一个工厂中实现了一类 Factory Method,而我认为其中有着重点的不同, Abstract Factory 强调产品的特异性(如车窗与车门之间的特异性,是车的不同组件),而 Factory Metho...原创 2020-04-21 17:56:25 · 124 阅读 · 0 评论 -
java编程思想 序列化
import java.io.*;public class Ans { public static void main(String[] args) throws IOException, ClassNotFoundException { //test0(); //test1(); //test2(); //test3(...原创 2020-03-06 02:37:24 · 132 阅读 · 0 评论 -
java编程思想 第十八章 字符流
import java.io.*;import java.util.Arrays;public class Ans { public static void main(String[] args) throws IOException { //test1(); // test2(); //test3(); test4()...原创 2020-03-03 22:49:29 · 78 阅读 · 0 评论 -
java编程思想 第十八章 字节流与装饰器
import java.io.*;import java.util.Arrays;public class Ans { public static void main(String[] args) throws IOException { //字节流是java 1.0提供的老方法,主要存在于一些老的代码中 FilterInputStream fis ...原创 2020-03-03 22:48:56 · 89 阅读 · 0 评论 -
Blog 正则表达式
总的来说博客中讲的太少了,还是要看编程思想,里面有关于这部分非常全面的讲解。import java.util.regex.Matcher;import java.util.regex.Pattern;public class Ans { public static void main(String[] args) { test1(); test...原创 2020-03-02 23:19:46 · 94 阅读 · 0 评论 -
Blog 时间与日期
import java.time.*;import java.util.Calendar;import java.util.Date;import java.util.Locale;import java.util.TimeZone;public class Ans { public static void main(String[] args) { test...原创 2020-03-02 23:18:23 · 120 阅读 · 0 评论 -
Blog 泛型
import java.lang.reflect.ParameterizedType;import java.util.Arrays;public class Ans { public static void main(String[] args) { test3(); test6(); } static void test0() ...原创 2020-03-02 00:03:02 · 84 阅读 · 0 评论 -
java编程思想 持有对象(三种弱引用与WeakHashMap)
其中SoftReference只在内存不够时回收其包含的对象,WeakReference则在任何时候都可能回收。而PhantomReference则最弱(虚引用),任何时候都不能从中get对象(只会得到null),而且必须和ReferenceQueue一起使用,它存在的目的就是监控包含对象被释放的事件,从而可以起到finalize的作用,即可以做最后的善后工作。(finalize已于java SE...原创 2020-03-01 21:46:11 · 187 阅读 · 0 评论 -
Blog 注解
注解是以前忽略的一个东西,然而今后参与到正规团队开发中应该会比较重要,所以先学一学import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Ta...原创 2020-02-29 23:42:10 · 97 阅读 · 0 评论 -
Blog 反射
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.security.spec.ECField;import java.util.ArrayList;import java.util.Arrays;import java.util.List;pu...原创 2020-02-29 23:41:07 · 64 阅读 · 0 评论 -
Blog 异常处理
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.nio.channels.OverlappingFileLockException;import java.security.spec.ECField;import java.util.loggin...原创 2020-02-28 23:30:17 · 77 阅读 · 0 评论 -
Blog Java核心类
总之今天最大的一个疑惑是为什么使用反射修改final属性时对类中的final String属性不可以修改,而且对我自己定义的类中的基本类型不可修改,但是对Integer这种包装类型中的value属性虽然是final int 但是可以修改,这非常奇怪。但是还是推翻了String内部的字符不可修改这个断言,具体有两种办法详见代码test0另外java编程思想350页说final属性都不可被反射...原创 2020-02-28 00:36:50 · 144 阅读 · 0 评论 -
java 编程思想 第十六章 Arrays的相关操作
import java.lang.reflect.Array;import java.util.Arrays;import java.util.Comparator;public class Ans { public static void main(String[] args) { class A { @Override ...原创 2020-02-27 21:04:59 · 97 阅读 · 0 评论 -
java 编程思想 第十六章 关于数组,数组与泛型的关系的探索
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Random;public class Ans { public static void main(String[] args) { A []a1 = new A[4]; ...原创 2020-02-27 21:04:20 · 100 阅读 · 0 评论 -
数据库系统概念 第二章
两个重要概念,其中空(null)值很明显是不好的,在编写一般代码时我们也知道如果将null设计进入程序是多么讨厌的一件事,或许这里可以使用《java编程思想》中出现的空对象和桩的想法,但是要处理诸如空对象的赋值以及运算的一些问题。...原创 2020-02-26 19:40:06 · 267 阅读 · 0 评论 -
编程思想第十五章练习19 (使用泛型可以创建extends ArrayList<A>这样强大的工具)
import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.Collection;public class Ans { public static void main(String[] args) { C c = new C(3); ...原创 2020-02-02 03:15:11 · 380 阅读 · 0 评论 -
编程思想第十五章练习17 (clone的用法)
import java.util.ArrayList;import java.util.Arrays;public class Ans { //还有很多更好的方法实现clone,如Serializable,详情可见 https://blog.c...原创 2020-02-02 03:13:50 · 87 阅读 · 0 评论 -
编程思想第十五章练习13
这里非常重要的一个属性,泛型当作参数传递时不会自动转型import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class Ans { public static void main(String[] args) { LinkedList<In...原创 2020-02-02 03:13:05 · 79 阅读 · 0 评论 -
编程思想第十五章练习11
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Ans { static void f(Map<String, List<? extends Pet>> m) {} public ...原创 2020-02-02 03:09:03 · 106 阅读 · 0 评论 -
NFA到DFA的转换(很多JAVA细节)
TreeSet其实是使用红黑树实现,和哈希没有关系,排序时不调用hashCode,HashSet会调用hashCode取得对象保存的位置,当同调用默认toString时会使用hashCode生成StringTreeSet排序时不主动调用equals(存疑),但是会主动调用compareTo当对象不能比大小时,只能确定其是否相等,会先调用hashCode,hashCode相等时会调用equa...原创 2019-09-25 22:06:46 · 865 阅读 · 0 评论 -
Java 类型信息 动态绑定
import java.lang.reflect.*;import java.util.HashMap;interface Interface { void say(); void sayMore(int i);}interface Interface2 { void hello();}class Real implements Interface, I...原创 2019-09-05 21:00:54 · 99 阅读 · 0 评论 -
关于Java编程思想中163页最后的问题以及有子类的类初始化问题
public class Answer { public static void main(String []args) { Before x = new After(); System.out.println("--------"); //Before y = new After(); }}class Before { ...原创 2019-07-12 06:31:08 · 84 阅读 · 0 评论 -
java静态方法和域会在第一次使用类时被初始化
如题,第一次调用静态方法(构造器也是静态方法)或域时会初始化类的静态方法(但是并不调用它)和域,但其他的地方不做改变(或者是说Java有一套自己的最初初始化方式,将其他地方也初始化了??)...原创 2019-07-12 05:18:25 · 544 阅读 · 0 评论 -
JAVA 关于容器的一些思考
首先,如果想对有序容器按自己的意愿排序,可以使用Collections.sort(/*容器*/ , /*在这里定义一个Comparator的派生类*/)在派生类里重载compareimport java.util.*;public class Main { public static void main(String[] args) { Map<I...原创 2019-07-16 00:52:17 · 86 阅读 · 0 评论 -
关于内部类继承可以继承父类达到自己继承自己
不得不说JAVA很神奇,很多功能需要探索,这里我们可以通过内部类继承外部类的方法达到自己继承自己的目的public class Main { public static void main(String[] args) { Seven s = new Seven(); Seven.Inner si = s.new Inner(); ...原创 2019-07-14 05:06:28 · 598 阅读 · 6 评论