![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK
文章平均质量分 69
JDK源码的学习
风吹千里
潜心一技、做到极致。
展开
-
CMS之promotion failed&concurrent mode failure
CMS并行GC收集器是大多数JAVA服务应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题:该问题是在进行Minor GC时,Survivor Space放不下,对象只能放入老年代,而此时老年代也放不下造成的。(promotion failed时老年代CMS还没有机会进行回收,又放不下转移到老年代的对象,因此会出现下一个问题concurrent mode failure,需要stop-the-wold 降级为GC-Serail Old)。concurrent mod原创 2022-07-05 11:28:50 · 206 阅读 · 0 评论 -
java for的几种循环方式
最近开发的一个项目中用到一种for的循环方式,我之前没有看到过,因此在这个空闲的时间,整理了一下java关于循环的知识。for循环第一种for循环这种循环方式是最常见也是最常用的,就是for(int i=0;i int [] array=new int[]{2,3,4,5,6,8}; for(int i=0;i<array.length;i++){原创 2017-06-29 23:50:35 · 10316 阅读 · 0 评论 -
java的单例详解
开发项目可能需要用到单例来实现一些功能,因此关于java多线程的单例模式,这是我通过学习和自己实验理解之后总结出来的。原创 2017-06-22 23:00:30 · 212 阅读 · 0 评论 -
Java中整数转浮点数的原理
在JDK中Float,Double类中有一个方法。原创 2024-04-03 09:29:04 · 811 阅读 · 0 评论 -
java位运算符常用场景
1.计算m*2^n次方(如计算3X8==3<<3) 2.判断一个数n的奇偶性 a&1 = 0 偶数 a&1 = 1 奇数 n&1==1?“奇数”:“偶数” 为什么与1能判断奇偶?所谓的二进制就是满2进1,那么好了,偶数的最低位肯定是0(恰好满2,对不对?),同理,奇数的最低位肯定是1.int类型的1,前31位都是0,无论是1&0还是0&am...原创 2018-04-03 14:59:35 · 2732 阅读 · 4 评论 -
jstat命令查看jvm的GC情况
jstat命令查看jvm的GC情况 (以Linux为例)jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]注意!!!:使用的jdk版本是jdk8. 类加载统计: Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载数量 Bytes:未加载占用空间 Time:时间 编译统计 Compiled:编译数量。...转载 2020-09-04 12:58:09 · 255 阅读 · 0 评论 -
Java8函数式编程之StreamAPI
什么是 Stream?Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorte...原创 2018-04-26 18:02:42 · 197 阅读 · 0 评论 -
Java编程杂记二
文章目录@[toc]Java 空接口Java断言关键字assertJava多态线程停止情景模拟解决方案方案一:stop()方法方案二:interrupt()方法Thread.sleep()为什么需要抛InterruptedException多个finally和return的执行顺序finally不一定执行多个finally执行顺序没有return的情况有return的情况20200624补充Java 空接口空接口是没有包含任何方法的接口。叫标记接口。标记接口是没有任何方法和属性的接口.它仅仅表明它的类原创 2020-08-08 07:47:03 · 156 阅读 · 0 评论 -
Java编程杂记三
文章目录参考Unsafe类double-check 写法空对象调用静态方法空对象instanceofScheduledThreadPoolExecutorJava远程调试String.intern不同jar完全相同的包名和类名的加载问题java 获取泛型的实际类java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。clone浅clone深cloneserialVersionUID参考jdk8源码java 版本 java version “1.8.0_191”Unsafe类原创 2020-08-08 07:48:03 · 310 阅读 · 0 评论 -
java类型转换之向上转换和向下转换
向上转型:即子类对象转换为父类对象。向下转型:即父类对象转为子类对象,这是又分为安全的向下转型和不安全的向下转型class Animal{ String type; public Animal(String type){ this.type = type; } public void eat(){ System.out.pri...原创 2018-04-27 09:53:02 · 2579 阅读 · 0 评论 -
java 与构造函数同名的函数是否可以存在?
今天写这篇文章主要记录一下自己的对java的学习。java 构造函数又称构造器,今天我遇到这样一个疑惑,就是在构造函数前面加上返回类型如void或者其他返回类型会怎么样?实验代码:public class Test { /** * @param args the command line arguments */ public static voi原创 2017-06-18 17:57:55 · 669 阅读 · 1 评论 -
java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题
转自https://blog.csdn.net/wisgood/article/details/11762427一、Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现...转载 2018-04-25 10:49:22 · 344 阅读 · 0 评论 -
Java编程杂记四
文章目录自动装箱和拆箱枚举Java多线程的开发中有三种特性原子性可见性有序性volatile保证原子性?自动装箱和拆箱如:Integer integer = 9;int n = integer;就相当于Integer integer = Integer.valueOf(9); //自动装箱int n = integer.intValue(); //自动拆箱枚举枚举本质就是一个类,在一个文件中已经定义了一个public class,就不能定义public enum公用的枚举类。如在同一文件中原创 2020-08-08 07:50:31 · 109 阅读 · 0 评论 -
Java优化正则表达式的匹配效率
回溯是造成正则表达式效率问题的根本原因,每次匹配失败,都需要将之前比对过的数据复位且指针调回到数据的上一位置,想要优化正则表达式的匹配效率,减少回溯是关键。独占模式应该算是贪婪模式的一种变种,它同样会尽量匹配更多的内容,区别在于在匹配失败的情况下不会触发回溯机制,而是继续向后判断,所以该模式效率最佳。贪婪模式是正则表达式的默认匹配方式,在该模式下,对于涉及数量的表达式,正则表达式会尽量匹配更多的内容,我用模型图来演示一下匹配逻辑。注意,到这步因为不满足匹配条件,所以触发回溯机制,将判断条件回调到上一个。转载 2022-10-13 22:35:10 · 969 阅读 · 0 评论 -
java编程杂记一
类之间的关系:继承、实现、依赖、关联、聚合、组合。位运算的使用场景、正则表达式、Java基本数据类型原创 2020-02-29 01:02:18 · 236 阅读 · 0 评论 -
Java中的Mark interface之RandomAccess接口
RandomAccess接口也是一个标记接口,还有Serializable接口,Cloneable接口 首先来看Collections.binarySearch的源码public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) { ...原创 2018-04-27 13:31:32 · 222 阅读 · 0 评论 -
Java8函数式编程之函数式接口
Java8函数框架解读函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升。那么,Java8是怎么支持函数编程的呢?主要有三个核心概念:函数接口(Function) 流(Stream) 聚合器(Collector)在上一篇的转载博客< 深入浅出 Java 8 Lambda 表达式>里,了解了什么是Lambda表达式,...原创 2018-04-26 14:21:05 · 351 阅读 · 0 评论 -
UTF-8编码原理
UTF-8是目前使用最广泛的Unicode字符编码,本文顺着历史顺序讲解,来引出UTF8编码的来由和工作原理。原创 2024-04-03 09:47:34 · 444 阅读 · 0 评论 -
深入浅出 Java 8 Lambda 表达式
转自http://blog.oneapm.com/apm-tech/226.html 摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等。本文系 OneAPM 工程师编译整理。Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在 Java 中定义的...转载 2018-04-25 18:51:36 · 163 阅读 · 0 评论 -
Java 类加载器与加载机制
需要注意的是,类加载过程是由 Java 虚拟机和类加载器共同完成的。Java 虚拟机提供了规范,定义了类加载过程的各个阶段,而类加载器负责执行具体的加载任务。Java 虚拟机默认提供了多个类加载器,它们按照一定的委托关系组成了类加载器层次结构,每个类加载器负责加载不同位置的类。原创 2024-06-13 18:55:04 · 609 阅读 · 0 评论 -
Java Closeable 和 AutoCloseable接口
Java Closeable 和 AutoCloseable接口原创 2024-05-09 22:11:26 · 408 阅读 · 0 评论 -
Java NIO学习笔记概述
refer to original文章目录1.Java NIO TutorialJava NIO: Channels and Buffers(通道和缓冲区)Java NIO: Non-blocking IO(非阻塞IO)Java NIO: Selectors(选择器)2.Java NIO OverviewChannels and BuffersSelectors3.Java NIO Channe...原创 2019-12-08 17:53:02 · 575 阅读 · 0 评论 -
Java编程:Java里的协程
今天看到这篇博客记录一下,后面有时间来研究一下协程看能不能对现在的项目有所提高转https://blog.csdn.net/zdy0_2004/article/details/51323583?utm_source=blogxgwz0这东西其实有很多名词,比如有的人喜欢称为纤程(Fiber),或者绿色线程(GreenThread)。其实最直观的解释可以定义为线程的线程。有点拗口,但本质上就...转载 2018-10-29 11:09:42 · 26901 阅读 · 2 评论 -
在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区
如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多。你也许会问,执行时间长有什么坏处?频发的Full GC消耗的时间是非常可观的,这一点会影响大型程序的执行和响应速度,更不要说某些连接会因为超时发生连接错误了。好,那我们来想想在没有Survivor的情况下,有没原创 2022-11-06 11:27:31 · 147 阅读 · 0 评论 -
Java如何获取某个包下所有的类
【代码】Java如何获取某个包下所有的类。原创 2023-03-08 10:35:25 · 1095 阅读 · 0 评论 -
java遇到Process 输出流阻塞的问题
今天发现之前写的一个程序,在程序中调用外部程序,需要把进程的InputStream的内容返回,在这个过程中,之前采用的直接获取,发现存在InputStream的结果太大,导致外部进程阻塞。 经过查资料,发现网上有InputStream流按照byte[]数组来读取,把内容拼接组成返回结果,这样可以解决进程阻塞的问题,但是存在内容读取重复的问题,而且不易解决。如果返回结果是字符串,最后在看到一个...转载 2020-01-16 23:28:39 · 1377 阅读 · 0 评论 -
JAVA8 十大新特性详解
转自https://www.cnblogs.com/xingzc/p/6002873.html 前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API ...转载 2018-04-25 16:01:52 · 922 阅读 · 0 评论 -
java 几种移位运算场景
1.超过自身位数的移位我们知道,int类型占用4字节,32位,而long类型占用8字节,64位。那么,如果将int类型(long类型)移动超过31位(63位)便失去了意义,因为用通俗的话来说,就是“全移走了”。不过幸运的是,系统对这种情况做了处理。 是怎么处理的呢?普遍都是这样认为的:如果左侧操作数是int类型,会对右侧操作数进行除数为32的求余运算,如果左侧操作数为long类型,会对右侧...原创 2018-04-03 14:53:55 · 346 阅读 · 0 评论 -
Java ==和equals的区别
对于包装类,java在编译Integer i = 100;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下。所以,包装类直接通过非new的方式生成对象时,如果值>=-128 and原创 2022-09-13 12:58:03 · 166 阅读 · 0 评论 -
自定义对象序列化
转自http://bluepopopo.iteye.com/blog/486548在Java中使用Serialization相当简单。如果你有一些对象想要进行序列化,你只需实现Serializable接口。然后,你可以使用ObjectOutputStream将该对象保存至文件或发送到其他主机。所有的non-transient和non-static字段都将被序列化,并且由反序列化重构造出一模一样...转载 2018-05-20 11:17:00 · 955 阅读 · 0 评论 -
Java对象的hashCode的计算
Java中hashCode方法的设计经常涉及到将对象的某些字段值转换成整数,并且通常这些整数值会乘以一个质数(比如31),然后加上或减去其他字段的整数值。当我们查看JDK源码或者一些有名的Java框架时,在一些hashcode的计算算法时都会出现31、29、17,那么为什么这样呢?这个数是不是可以任意的数字?以下是一些框架,jdk源码中的hashcode的计算。原创 2024-05-16 15:58:55 · 287 阅读 · 0 评论 -
Java源码解读之常量52429
在JDK8源码中java.lang.Integer有52429作为常量出现.原创 2024-06-26 22:20:40 · 320 阅读 · 0 评论 -
Java IO 文件写不全问题
今天记录一下JAVA IO方面的一些细节问题使用 Java 程序往磁盘写文件时碰到了这样的问题:文件写不全。假如内容(StringBuffer/StringBuilder)有 100W 个字符,但是通过 Java 程序写到文件里的却不到 100W ,部分字符不见了。代码大致是这样的:private void writeToDisk() throws Exception { ...原创 2018-11-21 12:01:46 · 1164 阅读 · 0 评论