
java
文章平均质量分 71
L13763338360
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Missing dependency ‘object scala.native in compiler mirror‘
编译seatunnel时,遇到一些问题:error: error while loading Object, Missing dependency 'object scala.native in compiler mirror', required by /modules/java.base/java/lang/Object.class原创 2022-10-13 17:36:59 · 1505 阅读 · 0 评论 -
JMM中的可见性、原子性和有序性
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。1 原子性由Java内存模型来直接保证的原子性操作包括read,load,assign.use,store,和write。 实现:synchronized lock+unlock concurrent包2 可见性可见性,是指线...原创 2021-08-20 14:31:13 · 371 阅读 · 0 评论 -
scala和java混合编译问题
接手一个纯scala项目,改造,加了些java代码,编译项目没有问题,但单独运行测试用例的时候出现异常了,跟了一段时间才解决。运行testcase错误提示scalac: error while loading Object, Missing dependency 'object scala in compiler mirror', required by /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre/lib原创 2021-05-07 16:46:45 · 1221 阅读 · 0 评论 -
flink任务读取资源文件问题
问题描述写一个flink实时任务,任务启动时解析资源目录下的xml文件。代码写好了,测试代码运行也ok,但一提交到集群运行的时候,就提示找不到文件。目录结构如下示例代码如下try { SAXReader saxReader = new SAXReader(); URL url = this.getClass().getResource("/cjm.xml"); File inputXml = new File(url.getFile());原创 2020-09-23 10:28:36 · 2911 阅读 · 1 评论 -
java对象内存分配与回收策略
java对象内存的分配,从概念上讲都应该分配在堆上分配,实际有可能经过即时编译后被拆散为标量类型并间接地在栈上分配。新生对象通常分配在新生代中,少数情况下可能会直接分配在老年代(比如对象大小超过一定阀值)。对象的分配规则并不是固定的,取决于虚拟机使用哪一种垃圾收集器,以及虚拟机中与内存相关的参数设定。使用HotSpot虚拟机,以客户端模式运行,使用Serial+Serial Old客户端默认收集器组合的内存分配和回收策略,最基本的几条内存分配原则。1. 对象优先在Eden分配大多数情况下,对象在原创 2020-07-05 16:25:05 · 3099 阅读 · 0 评论 -
低延迟垃圾收集器:Shenandoah和ZGC
1. 低延迟垃圾收集器衡量垃圾器的三个重要指标:内存占用 吞吐量 延迟这三个方面共同构成“不可能三角”,要在这三个方面同时具有卓越表现的收集器是非常困难的,甚至是不可能的,一款优秀的收集器最多同时可以达到其中两项。低延迟收集器主要有Shenadoah和ZGC,它们有几个特点几乎整个工作过程都是并发的,只有初始标记、最终标记阶段有短暂停顿 停顿时间基本是固定的,与堆的容量、堆中对象的数量不成正比例关系 Shenadoah和ZGC都可以在任意管理的(ZGC只能管理4TB以内的堆)堆容量原创 2020-07-05 15:38:10 · 1049 阅读 · 0 评论 -
合理计算创建多少个线程
CPU密集型理论上:线程数量 = CPU 核数(逻辑) 实际上:线程数量 = CPU 核数(逻辑) + 1为什么:实际线程数量=理论线程数量+1?计算(CPU)密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。IO密集型最佳线程数 =CPU核心数*(1/CPU利用率)=CPU核心数*(1 + IO耗时/CPU耗时)问题举例问题1:假设要求一个系统的 TPS(Transaction Per...原创 2020-06-17 11:14:12 · 1270 阅读 · 0 评论 -
reactor模型简介
单线程Reactorreactor线程负责多路分离套接字,accept新连接,dispatch分派请求到Handler处理器中,所有操作都在一个线程中。缺点:单线程模型是串行的,当其中某个handler阻塞时, 其他client的handler得不到执行,无法接收新的client请求。 单线程模型不能充分利用多核资源。多线程的Reactorreactor是一个独立线程,如果要利用多核优势,可以将reactor拆分成多个线程;handler由线程池中的线程执行。优点编程简单,可原创 2020-06-15 17:28:04 · 278 阅读 · 0 评论 -
String使用用final修饰的原因分析
首先要理解final的用途,在分析String为什么要用final修饰,final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写, final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。在了解final的用途后,在看String为什么用final修饰。1. 安全因为字符串是final修饰的,是不可变的,所以是线程安全的,同一个字符串实例可以被多个线程共享,不需要同步。 如果字原创 2020-06-02 17:26:26 · 954 阅读 · 0 评论 -
锁分类、锁消除、锁粗化
自旋锁很多时候,程序中共享数据的锁定状态一般只会持续很短的一段时间,为了这段时间去挂起和恢复线程其实并不值得。如果物理机上有多个处理器,可以让多个线程同时执行的话。我们就可以让后面来的线程“稍微等一下”,但是并不放弃处理器的执行时间,看看持有锁的线程会不会很快释放锁。这个“稍微等一下”的过程就是自旋。尝试获取锁的线程不会立即阻塞,而是采用循环的方式获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环好用CPU。J.U.C的自旋代码示例public final int getAndAd原创 2020-05-16 02:55:15 · 338 阅读 · 0 评论 -
mvn依赖问题排查
由于需要支持某些功能,修改了presto源码,编译的时候报错[INFO] --- duplicate-finder-maven-plugin:1.2.1:check (default) @ presto-main ---[INFO] Checking compile classpath[INFO] Checking runtime classpath[INFO] Checking test classpath[WARNING] Found duplicate and different clas原创 2020-05-13 15:49:21 · 4181 阅读 · 0 评论 -
spring AOP实现关键:代理模式
OOP面向对象,允许开发者定义纵向的关系,但并适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用。AOP称为面向切面,是面向对象的一种补充,将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性,可用于日志、事务处理、权限认证等等。AOP实现的关键在于代理模式。AOP代理主要分为静态代理和动态代理。1. 切面植入方法编译期织入:也叫静原创 2020-05-10 21:14:57 · 200 阅读 · 0 评论 -
class.forname和classloader区别
网上能找到讲class.forname和classloader区别的一堆文章,但多数不是自己想要的,结合别人和自己的分析,重新整理下class.forname和classloader二者区别。说到class.forname和classloader二者,必须先要了解java类的装载过程。java类的装载过程1. 加载类的加载主要干三件事通过类的全限定名来获取定义此类的二进制字节流 将这个类字节流代表的静态存储结构转为方法区的运行时数据结构 在堆中生成一个代表此类的java.lang.C原创 2020-05-09 11:42:40 · 4855 阅读 · 0 评论 -
微服务的服务发现机制
1. 为什么要服务发现当我们需要远程访问REST API或者Thrift API时,我们必须得知道服务的网络地址(IP Address和port)。传统的应用程序都是运行在固定的物理机器上,IP Address和端口号都是相对固定的。可以通过配置文件方式来实现不定期更新的Ip Address和端口号。在基于云的微服务应用中,服务实例的网络地址(IP Address和Port)是动态分配...原创 2020-04-24 15:24:05 · 449 阅读 · 0 评论 -
RPC和微服务的基本概念
1. RPCRPC,是一种远程调用方式(Remote Procedure Call),通过RPC我们可以像调用本地方法一样调用别的机器上的方法,用户将无感服务器与服务器之间的通讯。RPC在微服务当中起到相当大的作用,当然RPC不是微服务必须的一种方式,有别的方式也可以实现这种远程调用例如RESTful API就可以实现远程调用。如果有用过SOAP那么你使用RPC将会觉得很类似,都是可以直接...原创 2020-04-22 02:24:57 · 1768 阅读 · 0 评论 -
wait/notify/notifyAll、sleep、yield、suspend/resume、stop
1. wait和notify、notifyallwait、notify、notifyAll是Object类的成员方法,wait/notify或者wait/notifyAll配套使用,必须在synchronized修饰的代码块或者方法内使用,否则立即抛异常。1.1 wait线程会释放当前的对象锁,让出CPU,进入阻塞状态 当notify/notifyAll被执行时候,才会唤醒正处于等待...原创 2020-04-16 13:14:26 · 271 阅读 · 0 评论 -
逃逸分析、TLAB、对象分配
1. 什么是逃逸分析逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。2. 逃逸的两种方式方法逃逸:在一个方法体内,定义一个局部变量,而它可能被外部方法引用,比如作为调用参数传递给方法,或作为对象直接返回,可以理解成对象逃...原创 2020-04-08 10:37:58 · 303 阅读 · 0 评论 -
cms和g1回收器对比
1. GC算法1.1 引用计算法优点 可即时回收垃圾 最大暂停时间短 没有必要沿着指针查找 缺点 计数器值的增减处理非常繁重 计算器需要占用很多位 循环引用无法回收 1.2 标记-清除优点 实现简单 与保守式GC算法兼容 缺点 碎片化 分配速度慢 与写时复制技术不兼容 1.3 复制复制收集算法在对象存活率较高时就要进行较多的复...原创 2020-04-04 17:15:03 · 344 阅读 · 0 评论 -
实现单例模式的几种方式
饿汉模式优点:线程安全,代码简单 缺点:不能延迟加载public class Singleton { private Singleton(){} private static Singleton singleton = new Singleton(); public static Singleton getInstance(){ return s...原创 2020-03-25 13:24:25 · 116 阅读 · 0 评论 -
线程的几种状态以及线程状态切换
讲java线程的状态切换前先复习下线程创建的几种方法继承thread类 实现runnable接口 使用Callable和Future创建线程 使用线程池例如用Executor框架java线程有五个状态:初始、就绪、运行、阻塞、死亡。状态之间的切换用文字描述比较繁琐,千言不如一图,参考网友整理的图:https://www.iteye.com/blog/zy19982004-16269...原创 2020-03-21 17:12:02 · 800 阅读 · 0 评论 -
Thread Local Sotrage和java中的Thread Local
Thread Local Sotrage在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。但有些时候我们又需要依赖全局变量或者静态变量,并保证在多线程程序中能访问而不互相影响——操作系统提供的TLS线程本地存储。TLS的作用是能将数据和执行的特定的线程联系起来,线程访问线程...原创 2020-03-21 08:06:25 · 302 阅读 · 0 评论 -
内存溢出常见原因及解决方法
引起内存溢出的原因有很多种,常见的有以下几种:1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据。解决方法:检查对数据库查询中,是否有一次获得全部数据的查询;对于数据库查询尽量采用分页的方式查询。2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。解决方法:检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的...原创 2020-03-13 23:47:00 · 5974 阅读 · 0 评论 -
mvn镜像问题
java编译的时候经常会遇到类似下面的一些问题:[ERROR] Failed to execute goal on project apache-atlas: Could not resolve dependencies for project org.apache.atlas:apache-atlas:pom:2.0.0: Failed to collect dependencies at...原创 2020-02-24 16:30:55 · 590 阅读 · 0 评论 -
解决:dependencies.dependency.version' for com.google.guava:guava:jar is missing.
编译时报错 : dependencies.dependency.version' for com.google.guava:guava:jar is missing.具体如下XYSZM00089:presto-audit-plugin leonlai$ mvn clean package -Dmaven.test.skip=true[INFO] Scanning for projec...原创 2019-12-13 14:21:16 · 4483 阅读 · 1 评论 -
解决pom文件引入本地jar包问题
1.在项目跟pom.xml文件同级目录创建lib目录,将jar包放在该目录下。2.添加本地jar包,打包成功。<dependency> <groupId>com.github.bigdata.sql.parser</groupId> <artifactId>bigdata-sql-parser</artifactId...原创 2019-06-03 16:53:57 · 14045 阅读 · 0 评论 -
spring中ioc和aop的一些理解
1.依赖注入(Dependecy Injection)具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。2.控制反转(Inversion of Control)控制反转和依赖注入是同一个概念,在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 。3....原创 2019-04-17 14:35:38 · 151 阅读 · 0 评论