
JDK
春风化作秋雨
学而思,思而学
展开
-
java虚拟机之openj9测试对比hotspot
1、简介Eclipse OpenJ9 是一个 Java 虚拟机(JVM),它是运行 Java 应用程序的引擎,而 OpenJDK 是一个完整的开发工具包,包含其他组件,如Java 类库以及 JVM。默认情况下,OpenJDK 使用名为 Hotspot 的 JVM。简单地说,OpenJ9 是一个 JVM 替代方案,可将其作为 OpenJDK 二进制文件的一部分。而OpenJ9其自身是基于IBM开源的OMR项目所构建,OMR项目由一个高度集成的开放源码C和c++组件,可用于构建大量的语言,运行时支持许多不同的硬转载 2022-06-30 17:02:36 · 1532 阅读 · 0 评论 -
java 原子操作
1、原子操作原子操作(atomic operation)是指不可被中断的一个或一系列的操作。2、实现方式处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。Java 中可通过锁和自旋CAS 的方式来实现原子操作。 CAS 操作:Compare AndSet,或是 CompareAnd Swap,如今几乎所有的 CPU 指令都支持CAS 的原子操作。3、特点原子操作,是一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下避免数据不一致必要手段。...原创 2022-01-09 20:03:15 · 3123 阅读 · 0 评论 -
Java Executor 和 Executors
1、Executor 是接口,基本定义线程池。package org.springframework.core.task;import java.util.concurrent.Executor;public interface TaskExecutor extends Executor { void execute(Runnable var1);}ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执行的状 态并且可以原创 2022-01-09 19:49:25 · 640 阅读 · 0 评论 -
为什么要使用线程池
1、每次执行任务创建线程并执行有一定的性能开销,因为启动一个新线程比较耗时、耗资源。2、调用 new Thread() 创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程之间的相互竞争,会导致过多占用系统资源而导致系统瘫痪,还有过多的线程,线程之间的频繁的上下文切换消耗很多系统资源。3、直接使用 new Thread() 启动的线程不利于扩展,比如定时执行、定期执行、定时定期执行、线程中断等都不便实现。...原创 2022-01-09 19:35:22 · 418 阅读 · 0 评论 -
死锁与活锁、死锁与饥饿区别
1、什么是死锁死锁,是指两个或两个以上的进程(或线程)执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用干预,他们都死等下去,也都将无法往下推进。产生死锁的必要条件:1、互斥条件:所谓互斥就是进程在某一时间内独占资源。2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。2、什么是活锁任务或者执行者没有被阻塞,但由于某些原创 2022-01-06 21:37:09 · 1943 阅读 · 0 评论 -
java 中守护线程和本地线程区别
1、java 线程分两种1)守护线程(Daemon)2)用户线程(User)2、线程设置任何线程都可设置为守护线程和用户线程。方法: Thread.setDaemon(boolean);true 则把该线程 设置为守护线程,false 则为用户线程。说明:Thread.setDaemon(boolean) 须在 Thread.start()之前调用,否则运行时会抛出异常。3、两者的区别唯一区别:判断虚拟机(JVM)何时离开,Daemon Thread 是为其他线程提供服务..原创 2022-01-06 21:18:25 · 2205 阅读 · 0 评论 -
jvm思维导图
原创 2022-01-04 22:46:38 · 317 阅读 · 0 评论 -
Oracle JDK 与 OpenJDK
1、Oracle JDK每三年发布一版;Open JDK每三个月发布一版。2、Open JDK 是一个参考模型并且是完全开源的,而Oracle JDK是 OpenJDK的一个实现,并不是完全开源的。3、Oracle JDK 比 OpenJDK 更稳定。Open JDK和Oracle JDK的代码几乎相同,但Oracle JDK有更多的类和一些错误修复。因此,如果您想开发企 业/商业软件,我建议您选择Oracle JDK,因为它经过 了彻底的测试和稳 定。某些情况下,有些人提到在使用OpenJDK原创 2021-12-29 21:28:33 · 3338 阅读 · 0 评论 -
Java最大的优势
Java最大优势:跨平台。所谓跨平台,是指使用Java语言编写的程序,一次编译后,可在多个系统平台上运行;包括:windows、linux、unix等。实现原理:Java程序通过Jvm虚拟机在系统平台上运行。也就是说,只要系统安装相应的Jvm虚拟机,就可以运行Java程序。...原创 2021-12-29 21:23:27 · 298 阅读 · 0 评论 -
JVM 调优工具
Jdk本身自带很多监控工具,位于 Jdk安装路径/bin 目录下面,其中常用监控工具是jconsole 和 jvisualvm。1、jconsole用于对 JVM 中的内存、线程以及类对象实例等进行监控。2、jvisualvmJdk 自带的全能分析工具,可对内存快照、线程快照、程序死锁、监控内存的变化、gc 变化等进行分析。...原创 2021-12-29 20:55:59 · 100 阅读 · 0 评论 -
Java线程组-ThreadGroup
1、什么是线程组ThreadGroup类是线程组,表示一组线程的集合,可用其对一批线程和线程组进行管理。可把线程归属到指定的线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构类似于树形结构。开发人员创建的所有线程,都属于指定线程组;若没显式指定属于哪个线程组,则该线程就属于默认线程组,即main线程组。缺省情况下,子线程和父线程处于同一个线程组。说明:创建线程时,可指定其归属的线程组;线程运行中,不能改变它的归属线程组;即线程一旦指定所在的线程组就不可改变。2原创 2021-10-09 13:54:59 · 2155 阅读 · 3 评论 -
何为应用上下文
通常意义,“上下文”,代表的其实是一个整体环境;比如说文章,可以说上文中,访问到上文所陈述的内容,也可以说下文中,访问到下文中的内容,而我们这篇文章中每一段文字所代表的意思,是要根据我们的上下文来决定的,因为你随便拿出来一句话不去结合整体的语境去理解出来的意思肯定不是准确的,所以,我们这篇文章的上下文就是我们整篇的中心思想。举例:Spring中的数据源,就是存储在上下文中的,此时,不论是哪里的代码,都是可以通过上下文获取到数据连接并进行相关的操作的。同样,也可在任何地方通过spring中的上下文获取到b原创 2021-10-09 10:08:18 · 1113 阅读 · 0 评论 -
Java对称加密解密方法
1、示例代码package com.picc.common.util.security;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.lang3.StringUtils;import javax.crypto.*;import javax.crypto.spec.SecretKeySpec;import java.io.UnsupportedEncodingExceptio原创 2021-06-01 23:54:41 · 1656 阅读 · 0 评论 -
java通过反射对任何对象的属性值进行处理
1、代码import com.alibaba.fastjson.JSON;import lombok.extern.slf4j.Slf4j;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.lang3.reflect.FieldUtils;import java.lang.reflect.Field;import java.util.HashSet;import java.ut原创 2021-06-01 23:40:56 · 525 阅读 · 0 评论 -
BlockingQueue的原理及使用方法
1.前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。2.认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而...转载 2018-07-20 18:05:40 · 6289 阅读 · 0 评论 -
35个Java代码性能优化总结
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每...转载 2018-07-22 00:27:04 · 514 阅读 · 0 评论 -
java中String类设计成不可变的原因
1.什么是【不可变】? String不可变很简单,如下图,给一个已有字符串“abcd”第二次赋值成"abced",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。2.String为什么不可变?从原理上分析。 翻开JDK源码,java.lang.String类起手前三行,是这样写的:public final class String implements...原创 2018-07-22 00:55:08 · 6424 阅读 · 3 评论 -
Java hashCode() 和 equals()的若干问题精讲
本章的内容主要解决下面几个问题:1 equals() 的作用是什么?2 equals() 与 == 的区别是什么?3 hashCode() 的作用是什么?4 hashCode() 和 equals() 之间有什么联系?第1部分 equals() 的作用equals() 的作用是 用来判断两个对象是否相等。equals() 定义在JDK的Object.java中。通过判断...转载 2018-09-08 13:53:08 · 219 阅读 · 0 评论 -
RPC原理与代码实现远程过程调用
关键词:RPC框架,Socket通信、反射、动态代理、Java原生的序列化与反序列化1、RPC简介RPC(Remote Procedure Call),远程过程调用。它是一种通过网络从远程计算机程序上请求服务。RPC是一种技术解决方案,一种思想,与语言无关的。可用于:高并发程序,将程序各层分离以提高程序的负载;公共模块,为其他模块提供服务等。2、RPC框架的实现1. 技术简介R...原创 2018-09-15 10:45:37 · 1301 阅读 · 0 评论 -
一段Java程序的生命史
作为一名程序猿 ,我们每天都在写Code,但你真的了解它的生命周期么?今天就来简单聊下它的生命历程,说起一段Java Code,从出生到game over大体分这么几步:编译、类加载、运行、GC。编译Java语言的编译期其实是一段“不确定 ”的过程,因为可能是一个前端编译器把.java文件转变为.class文件的过程;也可能是指JVM的后端运行期编译器(JIT编译器)把字节码转变为机器码的...转载 2018-11-28 22:48:55 · 258 阅读 · 0 评论 -
Java_泛型的作用
1、泛型概念 java泛型,是javaSE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为【泛型类】、【泛型接口】、【泛型方法】。 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类...原创 2019-06-11 09:37:32 · 29667 阅读 · 1 评论 -
Java线程池_详解
1、为什么要使用线程池降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。2、线程池参数参数 说明 corePoolSize 核心线程数...原创 2019-07-04 14:28:15 · 316 阅读 · 0 评论 -
使用JDK之信号量(Semaphore)控制线程并发数量和接口请求次数
无论是内部锁synchronized,还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量却可以实现指定多个线程同时访问某一个资源。1.构造函数public Semaphore(int permits)public Semaphore(int permits,boolean fair); //第二个参数指定是否公平,参见公平锁在构造信号量时,必须...原创 2018-07-20 17:13:08 · 3234 阅读 · 0 评论