jdk
文章平均质量分 51
三笠爷
这个作者很懒,什么都没留下…
展开
-
Jvm 内存模型
一、内存模型内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JWM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JM的高效稳定运行。不同的JM对于内存的划分方式和管理机制存在着部分差异。程序计数器它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方.原创 2022-01-17 17:13:26 · 4497 阅读 · 0 评论 -
备忘小知识点
ThreadLocalRandom.current() 多线程随机数 比random效率高 random内部是同步的有锁机制原创 2021-08-12 10:54:27 · 122 阅读 · 0 评论 -
java retry 详解
retry就是一个标记,标记对一个循环方法的操作(continue和break)处理点,通俗说执行retry下的第一for循环的continue或breakpublic class Test1 { public static void main(String[] args) { for (int i = 0; i <3 ; i++) { for (int j = 0; j <10 ; j++) { Syst.原创 2021-01-27 15:18:56 · 255 阅读 · 0 评论 -
ThreadLocal详解
在默认情况下,每个线程中的这两个变量都为null:只有当线程第一次调用ThreadLocal的set方法或get方法时才会创建它们。 public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); ...原创 2020-12-08 13:02:47 · 128 阅读 · 0 评论 -
forkJoin使用
先贴一段可以使用的代码,有时间在研究吧package com.bjsdzk;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Future;import java.util.concurrent.RecursiveTask;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ForkJoinTaskExampl.原创 2020-11-05 18:15:28 · 109 阅读 · 0 评论 -
jvm深入理解
Java运行时数据区Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时转载 2020-10-13 14:26:31 · 135 阅读 · 0 评论 -
java 反射
1.反射简介反射就是在运行状态能够动态的获取该类的属性和方法,并且能够任意的使用该类的属性和方法,这种动态获取类信息以及动态的调用对象的方法的功能就是反射。优点:反射提高了程序的灵活性和扩展性。 降低耦合性,提高自适应能力。 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。缺点:性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。 使用反射会模糊程序内部逻辑;程序员.原创 2020-10-10 16:15:53 · 84 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用 面试题
1.强引用以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。2、软引用(SoftReference)如果一个对象只具有软引用,那就类似于可有可物的生活用品。**如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。**只要垃圾回收器没有回原创 2020-09-30 11:25:55 · 166 阅读 · 0 评论 -
Integer和String面试题
1.Integer1.Integer比较是否相等?Integer a = 1000, b = 1000; System.out.println(a == b);//1Integer c = 100, d = 100; System.out.println(c == d);//2答案falsetrue解析:Integer内部类IntegerCache.java,它缓存了从 - 128 到 127 之间的所有的整数对象。static final Integer ca.原创 2020-09-14 17:45:42 · 143 阅读 · 0 评论 -
垃圾回收算法
1.清除算法1.1标记清除算法首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,两个不足,一是标记和清除两个过程效率都不好,二是空间的问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程中需要分配较大的对象,无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作1.2复制算法他将可用内存按容量划分为大小相等的两块,然后再把已使用过的...原创 2020-01-10 11:31:18 · 97 阅读 · 0 评论 -
jdk 8 函数式编程 (二)
目录1.函数接口1.1定义2.2函数接口2.流2.1定义2.2创建流2.3中间和终端操作如果你发现虽然你的业务代码千差万別,但是它们拥有同样的准备和清理阶段,这时,你完全可以将这部分代码用 Lambda实现。比如文件流处理异或异常1.函数接口1.1定义被@FunctionalInterface注释的接口,满足@FunctionalI...原创 2019-12-06 17:28:28 · 257 阅读 · 0 评论 -
ServiceLoader
1.定义ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类2.破坏双亲SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 应用所依赖的 jar 包被包含进类路径(CLASSPATH)里。SPI接口中的代码经常需要加载具体的实现类。那么问题来了,SPI的接口是Java核心库的一部分,是由引...原创 2019-10-17 14:36:07 · 278 阅读 · 0 评论 -
深入理解类加载器
1.加载将class文件加载到虚拟机的内存,这个过程称为类加载,如下:加载:类加载过程的一个阶段:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象验证:目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。准备:为类变量(即static修饰的字段变量...原创 2019-10-12 15:55:20 · 103 阅读 · 0 评论 -
深入理解synchronized
作用范围修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。1.原理monitor与对象头在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充实例变量:存放类的属性数据信息,包括父类的属性信...原创 2019-10-12 14:33:39 · 159 阅读 · 0 评论 -
未整理链接
https://blog.csdn.net/javazejian/article/details/73413292类加载器和双亲委派https://www.cnblogs.com/butterfly100/p/9175673.html内存管理机制https://blog.csdn.net/javazejian/article/details/72828483synchro...原创 2019-10-12 10:42:46 · 78 阅读 · 0 评论 -
jdk 8 函数式编程
在java8中,满足下面任意一个条件的接口都是函数式接口被@FunctionalInterface注释的接口,满足@FunctionalInterface注释的约束。 没有被@FunctionalInterface注释的接口,但是满足@FunctionalInterface注释的约束@FunctionalInterface注释的约束接口有且只能有个一个抽象方法,只有方法定义,没有方法体...原创 2019-05-07 16:12:11 · 174 阅读 · 0 评论 -
ArrayList 基本原理 扩容
在list调用add的方法时会判断是否需要扩容 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }如果list是空,第一次add的时...原创 2019-08-21 15:22:31 · 214 阅读 · 0 评论 -
jdk8 HashMap 基本原理
目录1. 基本结构2.put 操作3.扩容机制4.链表转红黑树5.总结1. 基本结构HashMap 基于散列表实现,使用拉链法处理碰撞,在 JDK8 中,当链表长度大于 8 时转为红黑树存储,基本结构如下:HashMap 有一个 Node<K,V>[] table 字段,即哈希桶数组,数组元素是 Node 对象,结构定义如下:static...转载 2019-08-22 17:46:05 · 143 阅读 · 0 评论 -
链表和数组数据结构
1.链表是什么链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素;链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列,通过改变数组大小实现。而链表不是用顺序实现的,用指针实现,在内存中不连续。意思就是说,链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。所以,链表允许插入和删...转载 2019-09-02 14:51:46 · 855 阅读 · 0 评论 -
volatile关键字深入理解
1.原理为了提高处理器的执行速度,在处理器和内存之间增加了多级缓存来提升。但是由于引入了多级缓存,就存在缓存数据不一致问题,volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值失效每个线程都会有副本,多线程下就会有并发的问题2.特性volatile具有可见性、有序性,不具备原子性。原子性:为了保证原子性,需要通过字节码指令monito...原创 2019-09-18 10:28:49 · 103 阅读 · 0 评论 -
位运算
一、位运算基础1、位运算是针对整数的二进制进行的位移操作2、整数 32位 , 正数符号为0,负数符号为1。十进制转二进制 不足32位的,最高位补符号位,其余补零3、在Java中,整数的二进制是以补码的形式存在的4、位运算计算完,还是补码的形式,要转成原码,再得出十进制值5、正数:原码=反码=补码 负数:反码=原码忽略符号位取反, 补码=反码+1例如:十进制4 转二进制在计算机中表...原创 2019-08-23 11:36:51 · 524 阅读 · 0 评论 -
CAS无锁算法
1.原理 CAS(Compare And Swap),CAS有三个操作数,内存值V,旧的预期值A,要修改的新值B,当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其他线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,可以再次尝试。 ...原创 2019-10-09 15:12:49 · 128 阅读 · 0 评论 -
linux中无jstack、java程序cpu占用过高
第一种是没有找到linux服务器jdk的具体位置实际上java是个软连接,在继续跟进这个实际才是jdk的实际目录,在目录中可以找到jstack第二种是安装的jdk 没有jstack首先查看 yum源 yum whatprovides '*/jmap'查看可安装版本 或者自己直接安装一个新的jdk版本,我选择的是yum install java-1.8.0-open...原创 2019-06-18 16:05:46 · 1943 阅读 · 0 评论