Java基础
文章平均质量分 61
20200701
https://github.com/yq-debug
展开
-
弱引用分析
弱引用 日常在编码的时候开发者一般不会考虑垃圾回收,因为JVM会自动进行GC,这也是JVM中GC的本质 当在使用缓存的场景下,缓存中的对象会跟程序拥有一样的生命周期,使得对象无法被GC,当缓存中的对象过时无法及时GC,并且缓存占用内存会越来越大,造成资源浪费,甚至造成内存溢出。 以上所讲均是在strong reference 指向对象的情况之下,为了解决上述问题,JVM具有了弱引用的性能 弱引用指的是指向对象的引用为weak reference,当jvm gc时,如果一个对象仅被弱引用指向,则这个对象一定会原创 2021-01-02 14:09:22 · 418 阅读 · 0 评论 -
死磕JVM——java文件的编译与装载过程
JVM介绍 JVM运行时的区域划分 程序计数器 java虚拟机栈(执行方法的服务) 本地方法栈(为native方法服务) java堆 方法区 运行时常量池 直接内存 对象 对象的创建 对象的内存布局 对象的访问定位 垃圾收集与内存分配策略 判断对象是否可回收的方法 引用计数器 可达性分析法 垃回收策略 标记-清除算法 复制算法 标记-整理-清除算法 分代收集算法 ...原创 2019-01-10 22:24:51 · 211 阅读 · 0 评论 -
集合(list、set、Map)的遍历方式
元素在内存中的两种存放方式 一种是顺序存放,内存地址是连续的。顺序存放的集合一般会实现RandomAccess接口,表示此集合中的元素可以随即存取。读取一个元素的时间复杂度为O(1) 一种是随即存放,内存地址是不要求连续的。每个数据元素都存储这下一个数据元素在内存中的地址,只能按顺序进行读取,读取一个元素的平均时间复杂度为O(n) 传统的for循环遍历 for循环遍历基于计数器,根据集合中元素...原创 2019-10-09 15:53:24 · 335 阅读 · 0 评论 -
Integer类内部缓冲池的源码分析
引言 学习java的最好方法就是看源码和官方文档 关于Integer的缓冲池IntegerCache这里从源码角度进行分析,但是Integer的缓冲池与jvm内存模型之间的关系还有待研究。 Integer类源码分析 jdk版本:jdk1.8 public final class Integer extends Number implements Comparable<Integer&...原创 2019-08-16 17:30:59 · 220 阅读 · 0 评论 -
String字符串的创建与存储机制 —— 关于常量池以及String到底创建几个对象
在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化有以下两种情况: String s1 = new String(“abc”);和String s2 = new String (“abc”); 存在 两个引用对象s1和s2,两个内容相同的字符串对象"abc",他们在内存中的地址是不同的。只要用new就会产生新的对象。 String s2 = “abc”;和String s2 = ...原创 2019-03-14 20:45:23 · 704 阅读 · 0 评论 -
String、StringBuffer、StringBuilder三者的区别
Java中String、StringBuffer、StringBuilder三者的区别 首先: String用于字符串的操作,属于 不可变的类 StringBuffer和StringBuilder也用于字符串的操作,属于 可变类 执行效率上 StringBuilder>StringBuffer>String String是字符串常量,而StringBuffer和StringB...转载 2019-03-08 18:35:32 · 165 阅读 · 0 评论 -
JDK动态代理实现原理(含实例)
1. 动态代理概念 2. JDK动态代理技术 3. 动态代理相关类的介绍 3.1. InvacationHandler 3.2. Proxy 4. 关于CGLIB github实例: https://github.com/hello-qiang/Java/tree/master/TestProxy 1. 动态代理概念 动态代理的意义在于生成一个 占位(代理对象),用来代理真实的对象...原创 2019-02-28 18:28:44 · 971 阅读 · 1 评论 -
在运行时识别对象和类的信息——传统的RTTI和Java反射机制
类加载器 类加载器是Java运行环境的一部分,负责动态加载类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。 java类在经过Java编译器编译之后就转换为java字节码文件(.class文件),类加载器负责读取java字节代码,并转换为java.lang.Class类的一个实例. 获取class对象的三种方式 通过Class类的静态方法forName()获取(常用方式...原创 2019-01-17 16:09:18 · 189 阅读 · 0 评论 -
I/O操作
比特(Bit)、字节(Byte) 输入流与输出流 字符流、字节流 节点流和处理流 转换流 字节数组流 缓冲流 Serializable接口 关闭流 不关闭流的影响 关于资源泄露 如何关闭流 比特(Bit)、字节(Byte) 比特是计算机最小的二进制单位,是最小的传输单位,取值为0或者1 Byte表示字节,有8个比特位,是最小的存储单位。 输入流与输出流 按照传输方向分为输出流和...原创 2019-01-02 15:50:38 · 299 阅读 · 0 评论