java技术圈 为您找到相关结果 533

数据库连接断开 Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure - 为了美好的明天的个人空间

报错信息如下: Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 97,130 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago. ; SQL []; Communications link failure .... Caused by: com.mysql.jdbc.exceptions.jdbc4.Communic...阅读全文

博文 2020-07-03 10:54:29 OSCHINA

【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

目录 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法; 配合Netty实现简单的HTTP请求处理框架 其他需要使用反射执行Spring方法的业务亦可 目的 很多文章都提到了反射,但是对于方法参数处理这一块都是明确了类型,不支持按照实际参数动态转换,而本篇文章提供了一个思路怎么做到方法参数的动态调用。 大家也可以通过利用本文的方法结合自己的业务场景写出复用性更高、可扩展性更好的代码。欢迎各位指出文章中的错误,如果有更好的思路可以在下方评论,我们一起讨论。 欢迎转发,请注明出处。 实现方式 前提: 明确清楚需要执行的类和方法。 思路 通过Spring容器获取需要执行的类,注意:从spring容器中获取的类可能是被JDK或C...阅读全文

博文 2021-06-07 13:00:18 博客

BeanUtils对象属性copy的性能对比以及源码分析 - kancy

1. 对象属性拷贝的常见方式及其性能 在日常编码中,经常会遇到DO、DTO对象之间的转换,如果对象本身的属性比较少的时候,那么我们采用硬编码手工setter也还ok,但如果对象的属性比较多的情况下,手工setter就显得又low又效率又低。这个时候我们就考虑采用一些工具类来进行对象属性的拷贝了。 我们常用的对象属性拷贝的方式有: Hard Code net.sf.cglib.beans.BeanCopier#copy org.springframework.beans.BeanUtils.copyProperties org.apache.commons.beanutils.PropertyUtils.copyProperties org.apache.commons.beanutils.B...阅读全文

博文 2021-03-05 11:01:14 博客园

Thrift笔记(六)--单端口 多服务 - luckygxf

多个服务,使用监听一个端口。先上一个demo Test.thrift namespace java com.gxf.thrift enum RequestType { SAY_HELLO, //问好 QUERY_TIME, //询问时间 } struct Request { 1: required RequestType type; // 请求的类型,必选 2: required string name; // 发起请求的人的名字,必选 3: optional i32 age; // 发起请求的人的年龄,可选 } exception RequestException { 1: required i32 code; 2: optional string reason; } // 服务名 ser...阅读全文

博文 2021-05-02 16:26:40 博客园

如何解决java.lang.SecurityException: Invalid signature file digest for Manifest main attributes_tongtong0704的博客

这个问题是在maven打包之后由于重复引用某些依赖导致生成了一些.SF等文件,运行jar时会抛出。 在遇到这个问题时,一时不知道是什么原因,上网查了很多解决方法,有的回答是: 原因:在META-INF下会有多余的以SF结尾的文件,删除后不会出现次问题 找到原因是因为引入的log4j版本有问题,当引入如下版本: log4j log4j 1.2.17 打包后不会出现如上问题 但我删除了META-INF下能看到的所有文件,打包时还是会生成还是会报错(因为是打包过程生成的); 然后又继续找答案,有说是rpc包版本冲突的,也...阅读全文

博文 2020-12-11 03:20:44 CSDN博客

遍历中修改HashMap的Key_Dustin_CDS的博客

一、不可变对象 1.1 什么是不可变对象 immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects。 不可变的优势: (1)提高效率。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址。复制地址需要很小的内存,效率也很高;对于同时引用这个“ABC”的其他变量也不会造成影响。 (2)安全也简化了程序的开发。在多线程应用中可以不使用锁机制就能被其他线程共享。 1.2 String类为什么是不可变的 字符串常量池(String pool, String intern pool, St...阅读全文

博文 2021-04-01 12:36:27 CSDN博客_hashmap替换key

JAVA并发(2)—PV机制与monitor(管程)机制

登录注册写文章首页下载APP抽奖JAVA并发(2)—PV机制与monitor(管程)机制小胖学编程关注赞赏支持JAVA并发(2)—PV机制与monitor(管程)机制在操作系统中,进程之间经常有互斥和协作两种关系,为了有效处理这两种情况,W.Dijkstra在1965年提出了信号量(semaphore 塞吗佛)和PV操作。 1. 信号量与PV机制 信号量是一种抽象的数据类型,由一个整型S变量和P原语、V原语组成(原语:即不可中断的过程)。并且这个整型变量只能由PV改变。 P(S)意味着S-1,若S-1<0,说明资源不够用,将进程加入到等待队列中; V(S)意味着S+1,若S+1<=0,说明等待队列中存在进程,那么唤醒一个等待进程; 信号是操作系统提供的一种协调共享资源访问的方法。信号量由操作...阅读全文

博文 2021-06-16 02:56:50 简书

一文探讨堆外内存的监控与回收 | 徐靖峰

引子记得那是一个风和日丽的周末,太阳红彤彤,花儿五颜六色,96 年的普哥微信找到我,描述了一个诡异的线上问题:线上程序使用了 NIO FileChannel 的 堆内内存(HeapByteBuffer)作为缓冲区,读写文件,逻辑可以说相当简单,但根据监控,却发现堆外内存(DirectByteBuffer)飙升,导致了 OutOfMemeory 的异常。 由这个线上问题,引出了这篇文章的主题,主要包括:FileChannel 源码分析,堆外内存监控,堆外内存回收。 问题分析 & 源码分析根据异常日志的定位,发现的确使用的是 HeapByteBuffer 来进行读写,但却导致堆外内存飙升,随即翻了 FileChannel 的源码,来一探究竟。 FileChannel 使用的是 IOUtil 进行...阅读全文

博文 2020-04-22 10:55:31 个人博客

mysql datetime与timestamp区别_wangjun5159的专栏

datetime: 1、保存格式为YYYYMMDDHHMMSS(年月日时分秒)的整数,所以,它与时区无关,存入的是什么值就是什么值,不会根据当前时区进行转换。 2、从mysql 5.6.4中,可以存储小数片段,最多到小数点后6位,显示时格式为 yyyy-MM-dd HH:mm:ss[.222222] mysql5.5中,没有小数片段,精确到秒。所以,我再从5.6版本迁移到5.5时,因生成的sql中datetime(6)有小数片段,无法导入。 3、存储范围:从1000-01-01 00:00:00 到'9999-12-31 23:59:59' 4、长度,8个字节,datetime(n),n不是存储长度,而是显示的小数位数,即使小数位数是0,存储是也是存储的6位小数,仅仅显示0位而已;要想显示小...阅读全文

博文 2020-12-23 10:48:57 CSDN博客

可能是最全面的G1学习笔记

引子最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题。总体来讲,对于G1我有几个疑惑,希望能够在这篇文章中得到解决。 G1出现的初衷是什么? G1适合在什么场景下使用? G1的trade-off是什么? G1的详细过程? 如何理解G1的gc日志? G1的调优思路? G1和CMS的对比和选择? 一、基础知识1. 初衷在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足Java应用三种不同的需求:内存占用及并发开销最小化、应用吞吐量最大化和应用GC暂停时间最小化,但是,上述三种垃圾收集器都有几个共同的问题:(1)所有针对老年代的操作必须扫描整个老年代空间;(2)年轻...阅读全文

博文 2020-03-01 03:39:01 知乎

Spring 踩坑之@Transactional 神奇失效 - 个人文章

小鱼儿 18 Spring 踩坑之@Transactional 神奇失效 事务处理 事务 spring java 发布于 2018-04-26 引言 对于追求数据强一致性的系统,事务扮演者十分重要的角色.最近在项目中遇到一个事务失效的问题,在此分享给大家。 情景回放 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction ; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception ...阅读全文

博文 2020-07-21 12:57:12 SegmentFault 思否

scala中:: , +:, :+, :::, +++的区别

scala中:: , +:, :+, :::, +++的区别Jefffrey发布于 2016-05-08 初学scala的人都会被Seq的各种操作符所confuse。下面简单列举一下各个Seq操作符的区别。 4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw, x::list等价于list.::(x)) :+和+: 两者的区别在于:+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match ,而+:则不行. 关于+:和:+,只要记住冒号永远...阅读全文

博文 2021-02-22 07:42:28 SegmentFault 思否

Jackson 快速入门 - 捏造的信仰

捏造的信仰 2.3k Jackson 快速入门 java jackson json 发布于 7月14日 本文是对 Jackson 的快速入门介绍,主要分为四部分: 基本使用 基础配置 自定义序列化/反序列化 对泛型的处理 上面这几个话题足以覆盖日常开发的场景了。限于篇幅所限,本文力求读者读完后能掌握 Jackson 在日常使用中的绝大部分场景,以及了解如何着手探索 Jackson 的深层定制。 基本使用 引入 Jackson 本文假设读者熟悉 Maven 的使用,那么只需要在项目中添加下面的依赖关系就可以了: com.fasterxml.jackson.core jackson-databind阅读全文

博文 2020-09-02 02:51:58 SegmentFault 思否

Spring AOP基于注解的Around通知

@Around是一种建议类型,可确保方法执行前后的通知可以运行。 以下是@Around通知的语法: 语法 @Pointcut("execution(* com.yiibai.Student.getAge(..))") private void selectGetName(){} @Around("selectGetAge()") public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint){ System.out.println("[aroundAdvice] Around advice"); Object[] args=jp.getArgs(); if(args.length>0){ System.out.print("...阅读全文

博文 2020-04-23 06:23:23 Spring AOP教程™

Java动态编译执行_zleven的博客

在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译。 一、获取JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 获取JDK提供的java编译器,如果没有提供编译器,则返回null; 二、编译 //获取java文件管理类 StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null); //获取java文件对象...阅读全文

博文 2021-07-09 03:49:10 CSDN博客_java 编译执行

计算机浮点运算精度问题的一些探讨_薛梦冉

本篇博客要点如下: 浮点运算常见的一些精度问题 浮点运算精度问题产生的原因 浮点运算精度问题的几点疑问进制的相互转换 十进制和二进制整数转换十进制和二进制小数转换 浮点数据的存储 IEEE 754标准浮点数表示举例误差分析 浮点精度丢失问题的几种解决方案 转换成整型进行计算使用四舍五入计算使用Decimal函数计算 参考资料 浮点运算常见的一些精度问题 相信各位在进行浮点型数据运算的时候,出现过一些不符合常规认知,或者是我们不愿出现的结果, 比如下面这些示例(以MongoDB,Java,Python为例): mongoDB中对某种类型的交易金额聚合求和的时候: db.FACT_TRADE_POSP.aggregate([ {$match:{'AC_DT':'20200306','ETL_SO...阅读全文

博文 2020-09-29 03:44:41 CSDN博客

JVM之G1回收器和常见参数配置

过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器。还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置。G1回收器G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。我们会想一下我们上次课说的parNew+CMS回收器已经很厉害了,但是我们的服务器是那种超大内存的服务器呢?比如内存是32G的,可能最后我们的堆内存需要分配到十多个G,我们用parNew+CMS对于STW时间还是很长的,需要清理的越多,时间消耗越长啊,但是我们的G1垃圾回收器可以做到限制时间来收集,我们先看一下G1的模型图。来解释一下这个图,G1垃圾回收器,会把你的堆内存分为 大小相等 ...阅读全文

博文 2020-07-28 07:13:10 知乎

FEL表达式的用法 - QiaoZhi

Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单。 Fel有双引擎,同时支持解释执行和编译执行。可以根据性能要求选择执行方式。编译执行就是将表达式编译成字节码(生成java代码和编译模块都是可以扩展和替换的) FEL可以进行算数运算以及逻辑运算,也可以调用类的静态方法、非静态方法。 只需要一个jar包: 1. 简单使用 1. 简单计算 private static void calculate() { // 算数运算 FelEngine fel = new FelEngineImpl(); Object result = fel.eval("1.5898*1+75"); Sy...阅读全文

博文 2020-05-15 02:29:00 博客园

用nio实现Echo服务

今天突然间想用nio实现个Echo服务,程序实现起来实现不算困难,但跑起来后,在Server端的ServerSocket完成accept之后,我的CPU总是跳到100%。嗯,小郁闷,后来,才发现自己在Server端注册了多余的监听事件SelectionKey.OP_WRITE,改过来后好多了,希望记住这个教训。 EchoServer.java package edu.dlut.zxf.nio; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.Select...阅读全文

博文 2021-08-27 08:09:43 51CTO.COM

JVM运行时内存数据区域

JVM运行时内存数据区域 2018-01-20 Tommy.Tesla JVM 虚拟机栈 方法区 Java堆 运行时常量池 1 讨论背景 周志明老师写的《深入理解Java虚拟机》应该很多程序员都读过,第二章中阐述了Java虚拟机在执行Java程序的过程中是如何管理内存的,以及这些内存是如何被划分成更细的逻辑区域的。如下图所示,按照书中的论述JVM运行时数据区域包含以下几个数据区[1]。 按照《Java虚拟机规范(Java SE 7版)》,各区域的功能简要介绍如下: 程序计数器:各线程私有。用于记录每个线程下一条待执行的字节码指令以及相关信息。这是唯一的不会抛出OOM异常的区域。 Java虚拟机栈:各线程私有。虚拟机栈由一个个的栈帧组成,每个栈帧包含了对应方法执行所需要的信息,具体包括:局部变...阅读全文

博文 2020-06-03 13:19:59 tbwork.org

Chapter 9. Jetty Logging

.LEVEL=Sets the logging level for all loggers within the name specified to the level, which can be (in increasing order of restriction) ALL, DEBUG, INFO, WARN, OFF. The name (or hierarchy) can be a specific fully qualified class or a package namespace, for example, -Dorg.eclipse.jetty.http.LEVEL=DEBUG is a package namespace approach to...阅读全文

博文 2021-01-28 12:12:21 docs.huihoo.com

使用Java Low Level REST Client操作elasticsearch - ~冰

Java REST客户端有两种风格: Java低级别REST客户端(Java Low Level REST Client,以后都简称低级客户端算了,难得码字):Elasticsearch的官方low-level客户端。 它允许通过http与Elasticsearch集群进行通信。 不会对请求进行编码和响应解码。 它与所有Elasticsearch版本兼容。Java高级REST客户端(Java High Level REST Client,以后都简称高级客户端):Elasticsearch的官方high-level客户端。 基于low-level客户端,它公开了API特定的方法,并负责处理。 低级客户端 的功能包括: 依赖最小 所有可用节点,会负载平衡 在节点故障和响应特定状态码的情况下会进行...阅读全文

博文 2020-12-03 05:58:47 博客园

深入理解数据库编程中的超时设置 - 云+社区

数据库是开发过程中最常用的组件,然而我们经常会遇到各种各样的超时异常,如:connect timeout:建立数据库连接超时socket timeout:socket读取超时statement timeout:单个sql执行超时transaction timeout:事务执行超时,一个事务中可能包含多个sqlget connection timeout:从连接池中获取链接超时读完此文,你将彻底掌握各种超时产生的根本原因,以及对应的解决方案。1 connectTimeout与socketTimeoutconnect timeout和socket timeout都属于TCP层面的超时。以mysql为例,我们可以在jdbc url中指定connectTimeout和socketTimeout。如:...阅读全文

博文 2020-07-03 11:41:01 腾讯云

理解ClassNotFoundException与NoClassDefFoundError的区别 - 云+社区

上篇文章已经介绍过Java的类加载机制,在类加载的过程中我们最常遇到的异常就是:ClassNotFoundException NoClassDefFoundError但是你知道他们的区别吗?以及什么情况下发生上面的异常? 如果你还不清楚,那么不着急,我们来仔细分析一下:先来说说第一个异常提示名字已经非常友好了,就是告诉我们使用类加载器就加载某个类的时候,发现所有的path下面都没有找到,从引导类路径,扩展类路径到当前的classpath下全部没有找到,就会抛出上面的异常,最常见的例子就是加载JDBC驱动包的时候,它的依赖jar并不在classpath里面,如下:. package class_loader.exception; public class ExceptionTest { pub...阅读全文

博文 2021-04-03 07:11:41 腾讯云

总第405篇2020年 第29篇很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。本文从GC之痛、ZGC原理、ZGC调优实践、升级ZGC效果等维度展开,详述了ZGC在美团低延时场景中的应用,以及在生产环境中取得的一些成果。希望这些实践对大家有所帮助或者启发。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低...阅读全文

博文 2020-08-07 06:12:22 mp.weixin.qq.com

HeadFirst 设计模式学习笔记8--代理模式_Java_数据库天地

1.这一节的任务是我们需要完成对上一节的糖果机产生一个机器状况和余量的报告,若这个报告在本地(不是通过Internet)生成的话,那么我们的设计就很简单了,在糖果机中加入Location的信息,并且创建一个类GumballMonitor 完成报告的生成: public class GumballMonitor { GumballMachine machine; public GumballMonitor(GumballMachine machine) { this.machine = machine; } public void report() { System.out.println("Gumball Machine: " + machine.getLocation()); System...阅读全文

博文 2020-04-21 02:18:57 CSDN博客

Spring AOP中JDK和CGLib动态代理哪个更快?

一、背景 昨天一位知识星球的小伙伴面试的时候被问到:Spring AOP中JDK和CGLib动态代理哪个效率更高?在知识星球整理了一下,今天特分享出来,供大家参考!对知识星球有兴趣的可以了解一下: 二、基本概念 首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。 自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了Spring的很多地方。 JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横...阅读全文

博文 2021-06-12 14:41:44 juejin.cn

关于log4j root logger 标签 以及additivity 属性_大鑫不列迭的博客

今天和两个同事讨论Log4j,他们都需要解决一个问题,怎么分开输出Logger。这么讲不清楚,举个例子: Java代码 package com.gmail.at.ankyhe.log4jtest; import org.apache.log4j.Logger; public class ClassA { private static Logger logger = Logger.getLogger(ClassA.class.getName()); public ClassA() { logger.info("ENTER ClassA()"); } public void foo() { logger.info("foo()"); bar(); } public void bar() { Lo...阅读全文

博文 2022-04-25 03:30:24 CSDN博客_log4j root

TreeMap 实现原理

在用TreeMap之前我们要对TreeMap有个整体的认识。 1、TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合。 TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了NavigableMap接口,它支持一系列的导航方法, TreeMap实现了Cloneable接口,它可以被克隆 TreeMap introduction:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided a...阅读全文

博文 2021-04-03 06:12:19 juejin.cn

antlr4 访问器模式实现四则运算_d64793946的博客

1.eclipse 或idea安装antlr4插件(以eclipse 为例 ) windows->Eclipse Marketplace->搜索antlr 搜索到antlr 4 ide 进行安装 2.插件安装完成后新建antlr4 项目 file ->new ->other->antlr4项目 填写项目名->完成 3.将项目转化为maven项目 右键项目-->configure->转化为maven项目 方便管理 加入如下依赖 org.antlr antlr4-runtime 4.7.2 ...阅读全文

博文 2020-09-16 08:57:16 CSDN博客

为什么必须是final的呢?

一个谜团 如果你用过类似guava这种“伪函数式编程”风格的library的话,那下面这种风格的代码对你来说应该不陌生: 1 2 3 4 5 6 7 8 9 public void tryUsingGuava() { final int expectedLength = 4; Iterables.filter(Lists.newArrayList("123", "1234"), new Predicate() { @Override public boolean apply(String str) { return str.length() == expectedLength; } }); } 这段代码对一个字符串的list进行过滤,从中找出长度为4的字符串。看起来很是平常,...阅读全文

博文 2019-10-20 14:18:03 崔鹏飞的Octopress Blog

集成JMX

在Spring中,可以方便地集成JMX。 那么第一个问题来了:什么是JMX? JMX是Java Management Extensions,它是一个Java平台的管理和监控接口。为什么要搞JMX呢?因为在所有的应用程序中,对运行中的程序进行监控都是非常重要的,Java应用程序也不例外。我们肯定希望知道Java应用程序当前的状态,例如,占用了多少内存,分配了多少内存,当前有多少活动线程,有多少休眠线程等等。如何获取这些信息呢? 为了标准化管理和监控,Java平台使用JMX作为管理和监控的标准接口,任何程序,只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。 实际上,常用的运维监控如Zabbix、Nagios等工具对JVM本身的监控都是通过JMX获取的信息。 因为JMX是一个标准接口,...阅读全文

博文 2021-11-18 07:17:50 廖雪峰的官方网站

超好用的自带火焰图的 Java 性能分析工具 Async

如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然。别慌,这里有一款低开销、自带火焰图、让你大呼好用的 Java 性能分析工具 - async-profiler。 最近 Arthas 性能分析工具上线了火焰图分析功能,Arthas 使用 async-profiler 生成 CPU/内存火焰图进行性能分析,弥补了之前内存分析的不足。在 Arthas 上使用还是比较方便的,使用方式可以看官方文档。这篇文章介绍 async-profiler 相关内容。 Arthas 火焰图官方文档:alibaba.github.io/arthas/prof… 如果你想了解更多 Arthas 信息,可以参考之前文章:Arthas - Java 线上问题定位处...阅读全文

博文 2021-04-01 12:21:30 profiler 了解一下

理解Java中的弱引用(Weak Reference) - absfree

本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:) 1. What——什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference类,我们首先来看一下官方文档对它做的说明: 弱引用对象的存在不会阻止它所指向的对象变被垃圾回收器回收。弱引用最常见的用途是实现规范映射(canonicalizing mappings,比如哈希表)。 假设垃圾收集器在某个时间点决定一个对象是弱可达的(weakly reachable)(也就是说当前指向它的全都是弱引用),这时垃圾收集器会清除所有指向该对象的弱引用...阅读全文

博文 2021-04-27 05:57:37 博客园

使用 Checkstyle 检查代码风格

"一千个读者眼中有一千个哈姆雷特". "一千个开发者键盘之下, 可能有一千零一种代码风格". 背景 本文所有代码可以从 GitHub 获得. 每个开发者都会有自己喜欢的代码风格, 但当多个开发者需要协作开发一个项目的时候, 如何避免产生图中这样的"圣战"呢. Checkstyle 是一款能够帮助开发者编写遵循一定规范的 Java 代码的工具. 它默认支持 Google 的代码风格规范和 Sun 的代码风格规范, 这两种风格规范和大多数开发者平时使用的代码风格比较相近, 因此通常能够被大多数开发者接受. Checkstyle 也是高度可定制的, 可以根据自己/公司/组织的情况进行配置. 目标 通过本文, 你将了解到: 如何通过 Maven 插件, 在打包(或测试)期间自动检查代码风格; 如何配...阅读全文

博文 2020-07-02 09:57:00 掘金

ThreadLocalMap里Entry为何声明为WeakReference? - waterystone

Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象。Map的Entry里,key为ThreadLocal对象,value即为私有对象T。在spring MVC中,常用ThreadLocal保存当前登陆用户信息,这样线程在任意地方都可以取到用户信息了。 public class UserContext { private static final ThreadLocal userInfoLocal = new ThreadLocal(); public static UserInfo getUserInfo() { return userInfoLocal.get(); } public static void setUs...阅读全文

博文 2021-04-27 05:58:59 博客园

Java线程池「异常处理」正确姿势:有病就得治

更多精彩文章。 《微服务不是全部,只是特定领域的子集》 《“分库分表" ?选型和流程要慎重,否则会失控》 这么多监控组件,总有一款适合你 《使用Netty,我们到底在开发些什么?》 《这可能是最中肯的Redis规范了》 《程序员画像,十年沉浮》 最有用系列: 《Linux生产环境上,最常用的一套“vim“技巧》 《Linux生产环境上,最常用的一套“Sed“技巧》 《Linux生产环境上,最常用的一套“AWK“技巧》 如果你认同这些知识,欢迎关注微信公众号小姐姐味道 ID:xjjdog 假设我们有一个线程池,由于程序需要,我们向该线程池中提交了好多好多任务,但是 这些任务都没有对异常进行try catch处理,并且运行的时候都抛出了异常 。这会对线程池的运行带来什么影响? 正确答案是:没有影...阅读全文

博文 2020-08-28 09:46:12 掘金

编码转换问题_网络_qq_38409944的博客

注意:iso-8859-1是JAVA网络传输使用的标准字符集,而gb2312是 标准中文字符集,当你作出提交表单等需要网络传输的操作的时候, 就需要把 iso-8859-1转换为gb2312字符集显示,否则如果 按浏览器的gb2312格式来解释iso-8859-1字符集的话, 由于2者不兼容, 所以会 是乱码. UTF-8三个字节代表一个char iso-8859-1一个字节代表一个char GBK两个字节代表一个char 一直以为,java中任意unicode字符串,可以使用任意字符集转为byte[]再转回来,只要不抛出异常就不会丢失数据,事实证明这是错的。 经过这个实例,也明白了为什么 getBytes()需要捕获异常,虽然有时候它也没有捕获到异常。 言归正传,先看一个实例。 用ISO-...阅读全文

博文 2020-04-26 03:55:23 CSDN博客

Java 正确的做字符串编码转换 - 月下狼的个人页面

【推荐阅读】微服务还能火多久?>>> 字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(windows)默认的环境编码为GBK,那么编译时, JVM将 按照GBK编码将字节数组解析成字符,然后将字符转换为unicode格式的字节数组,作为内部存储。 当打印这个字符串时,JVM 根据操作系统本地的语言环境,将unicode转换为GBK,然后操作系统将GBK格式的内容显示出来。 当源码文件是UTF-8, 我们需要通知编译器源码的格式,javac -encoding utf-8 ... , 编译时,JVM按照utf-8 解析成字符,然后转换为unicode格式的字节数组, ...阅读全文

博文 2020-04-26 07:05:42 OSCHINA

你听说过 JMX 么 - 程序员自由之路

什么是JMX JMX(Java管理扩展),是一套给应用程序引入监控管理功能的接口。比如我们可以通过JMX来监控Tomcat的运行状态。JMX最主要的应用场景就是中间件的监控,配置文件的在线修改配置。 相关概念 一个典型的JMX架构图: MBean:是Managed Bean的简称。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用自醒和反射来获取Object的值和调用Object的方法,只是MBean更为复杂和高级一些。 MBeanServer:MBean生存在一个MBeanServer中。MBeanServer管理这些MB...阅读全文

博文 2021-01-26 02:50:58 博客园

Java并发基石——所谓“阻塞”:Object Monitor和AQS(2)_JAVA入门中

(接上文《Java并发基石——所谓“阻塞”:Object Monitor和AQS(1)》) 3、AQS 上文我们较为详细的介绍了Java线程调度中的Object Monitor机制以及其工作情况,本文我们开始介绍Java线程调度中的另一种实现机制AQS,包括它的使用方式和底层工作原理。 3.1、AQS介绍 JAVA中的AQS队列从根本上来讲是基于CAS的典型实现(也是使用volatile关键字的典型案例)。从技术层面的依赖关系上讲它首先依赖于java中的java.util.concurrent.locks.LockSupport类,这个类在本专题之前的文章中已经介绍过,专门用来实现应用程序级别对硬件级别的“同步多线程(SMT)”技术的封装。 同步多线程(SMT) 技术是一种硬件层面的技术,具...阅读全文

博文 2021-06-16 02:47:38 CSDN博客

Flink task和subTask_大数据私房菜的博客

Flink-Task、SubTask、并行度 ldc2013的博客 08-01 292 Task与SubTask 一个算子就是一个Task. 一个算子的并行度是几,这个Task就有几个SubTask 对应关系: 算子=Task 并行度=SubTask task是抽象概念,subtask是物力概念 Parallelism并行度 默认并行度--cpu核数 关键点 不同的并行度(subtask),肯定在不同的slot,但也可能在不同的taskmanager 一个流程序的并行度,可以认为就是其所有算子中算子并行度最大的并行度 数据传输模式: One-to-one:. 【白话Flink基础理论】Flink运行时(Runtime)架构(三)并行度&Task&SubTask&Slot&Flink中的并行剖...阅读全文

博文 2022-08-04 06:54:20 CSDN博客_flink subtask

JDK动态代理与运行时织入字节码

blog.csdn.net/u010061691/…java jdk动态代理其实是动态生成字节码与反射机制的一个结合,说到反射机制很多人都用到过反射,只要得到对应类的Class对象即可,调用方法,获取成员变量等等,那么jdk的动态代理就是在程序运行的过程中,动态的将我们维护的检查性的代码,放在正常的业务代码之前,那么怎么调用我正常的业务代码呢,因为业务可能有很多种,也就是说可能会有不同的类,但是都要执行相同的检查性代码,如我们要取钱,或者是修改身份证,都必须验证通过才可以,这显然是两个类,一个是Money,一个是ID,所以我们在调用正常业务代码的时候,其实不知道我们调用的是谁的代码,这时候就用到反射,通过反射,动态的识别类型,然后再调用方法,如我们要取钱,那么传入的应该是一个Money的实例...阅读全文

博文 2021-06-14 12:55:27 juejin.cn

System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放_aty

我之前的一篇博客: java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答) 介绍了java堆外内存的使用,以及堆外内存的释放。那篇博客遗留了一个问题:DirectByteBuffer究竟是如何释放堆外内存的?本文主要是解决下那篇博客的遗留问题。 首先我们修改下JVM的启动参数,重新运行之前博客中的代码。JVM启动参数和测试代码如下: -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=40Mimport java.nio.ByteBuffer; public class TestDirectByteBuffer { // -verbose:gc -XX:+Pr...阅读全文

博文 2020-07-28 07:11:53 CSDN博客_disableexplicitgc

Netty 中的 Future & Promise

Netty 源码中大量使用了异步编程,从代码实现角度看就是大量使用了线程池和 Future。熟悉 Java 5 的同学一定对 Future 不陌生。简单来说就是其代表了一个异步任务,任务将在未来某个时刻完成,而 Future 这个接口就是用来提供例如获取接口、查看任务状态等功能。Netty 扩展了 Java 5 引入的 Future 机制。从下面的类图我们可以看到相关类的关系:Netty 的 Future 接口需要注意的是,上面类图中有两个 Future,最上面的是 java.util.concurrent.Future,而其下面的则是 io.netty.util.concurrent.Future。JDK 的 Future 对象,该接口的方法如下:// 取消异步操作 boolean can...阅读全文

博文 2021-08-29 03:33:12 www.linkedkeeper.com

Hadoop集群(第6期)_WordCount运行详解 - 虾皮

1、MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。 在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。 在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个...阅读全文

博文 2020-08-31 02:29:33 博客园

Intellij-Idea远程调试

前言 线上(真-线上/测试环境)代码出了问题,总是要在本地复现,然后debug,这个过程是在是不太友好,而且线上的很多数据本地没有,经常耽误好久的时间来同步数据. 前文介绍过一种在运行时DEBUG及修改Java代码的方式,阿里开源java动态追踪工具 Arthas的使用.其主要针对的是线上修改代码及JVM实时查看. 但是有很多问题,我们更想要IDE的DEBUG功能,比如线上跑了NPE,本地没有办法复现因为可能是线上的数据问题,这时候就会想,如果可以在线上这里打个断点,就知道是谁为空了. 幸好Java是有远程DEBUG的支持的,而且Intellij-IDEA也实现了相关的功能,今天学习并且记录一下. 启动参数 首先在服务端使用JVM的-Xdebug参数启动Jar包. java -Xdebug ...阅读全文

博文 2021-01-26 02:49:11 Java代码