Java
RunningShare
这个作者很懒,什么都没留下…
展开
-
Java编译器优化技术之逃逸分析
一、逃逸分析的原理逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术,它与类型继承关系分析一样,并不是直接优化代码的手段,而是为其他优化措施提供依据的分析技术。逃逸分析的基本原理:方法逃逸:分析对象动态作用域,当一个对象在方法里面被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,这种称为方法逃逸; 线程逃逸:甚至还有可能被外部线程访问到,譬如赋值给可以在其他线程中访问的实例变量,这种称为线程逃逸;从不逃逸、方法逃逸到线程逃逸,称为对象由低到高原创 2020-06-20 12:59:00 · 377 阅读 · 0 评论 -
InheritableThreadLocal详解
1、简介在上一篇 ThreadLocal详解 中,我们详细介绍了ThreadLocal原理及设计,从源码层面上分析了ThreadLocal。但由于ThreadLocal设计之初就是为了绑定当前线程,如果希望当前线程的ThreadLocal能够被子线程使用,实现方式就会相当困难(需要用户自己在代码中传递)。在此背景下,InheritableThreadLocal应运而生。Inheritable thread-local variables are used in preference to ordi转载 2020-06-05 17:02:19 · 373 阅读 · 0 评论 -
Java对象死亡判定
Java对象死亡判定1、判定对象是否存活1.1、引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的优缺点缺点1、两个对象再无任何引用,实际上这两个对象已经不可能再被访问,但是它们因为互相引用着对方,导致它们的引用计数都不为零,引用计数算法也就无法回收它们2、占用了一些额外的内...原创 2020-04-17 11:19:30 · 363 阅读 · 0 评论 -
Metaspace 之一:Metaspace整体介绍(永久代被替换原因、元空间特点、元空间内存查看分析方法)
回顾根据JVM内存区域的划分,简单的画了下方的这个示意图。区域主要分为两大块,一块是堆区(Heap),我们所New出的对象都会在堆区进行分配,在C语言中的malloc所分配的方法就是从Heap区获取的。而垃圾回收器主要是对堆区的内存进行回收的。而另一部分则是非堆区,非堆区主要包括用于编译和保存本地代码的“代码缓存区(Code Cache)”、保存JVM自己的静态数据的“永生代(Perm G...转载 2020-04-14 17:47:03 · 683 阅读 · 0 评论 -
GC日志中,Metaspace的这几个参数分得清吗?
GC日志中,Metaspace的这几个参数分得清吗?占小狼gc3月前在GC日志中,Metaspace这一行的 used ,capacity ,committed ,reserved 具体都代表什么?HeapPSYoungGen total 10752K, used 4419K[0xffffffff6ac00000, 0xffffffff6b800000, 0xf...转载 2020-03-20 11:27:15 · 1001 阅读 · 0 评论 -
CMSInitiatingOccupancyFraction=70、UseCMSInitiatingOccupancyOnly和CMSScavengeBeforeRemar
CMS GC要决定是否在full GC时做压缩,会依赖几个条件。其中,第一种条件,UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 是搭配使用的;前者目前默认就是true了,也就是关键在后者上。第二种条件是用户调用了System.gc(),而且DisableExplicitGC没有开启。第三种条件是young gen报告接下...转载 2020-03-18 13:37:32 · 532 阅读 · 0 评论 -
Java运行时数据区总结
目录运行时数据区划分图详细描述程序计数器Java虚拟机栈 本地方法栈Java堆方法区直接内存运行时数据区划分图详细描述程序计数器线程私有,存取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成Java虚拟机栈 线程私有,每个方法被执行的时候,...原创 2020-03-10 17:56:33 · 225 阅读 · 0 评论 -
代码精进篇之封装ElasticSearch通用Dao(去除掉方法间调用的Map传递)
背景近日,正在整合SpringBoot与ElasticSearch相关代码,由于对ES的学习时间有限,对其概念和API调用还不够了解,官网的API调用实例看着有许多重复类似的构造模式,于是打算先尝试地把一些已掌握的API接口封装成底层DAO,待后续有进一步的需求,再进一步完善。Map参数传递的需求在封装DAO过程中,很难免会遇到需要把一些通用参数组装一起,最后通过某个参数传入,进一步调...原创 2020-03-08 13:32:19 · 1031 阅读 · 0 评论 -
spring使用注解通过子类注入父类的私有变量
方法一通过super.setBaseDao方法设置父类私有变量父类public class BaseServiceImpl { private BaseDao baseDao; public BaseDao getBaseDao() { return baseDao; } public void setBaseDao(BaseDao b...转载 2020-03-04 17:21:44 · 2162 阅读 · 0 评论 -
Java Json 数据下划线与驼峰格式进行相互转换
概述今天遇见一个需求,需要对json数据进行下划...转载 2020-03-04 13:59:49 · 2858 阅读 · 0 评论 -
深度剖析JDK动态代理机制
摘要相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象。代理模式使用代理模式必须要让代理类和目标类实现相同的接口,客户端通过代理类来调用目标方法,代理类会将所有的方法调用分派到目标对象上反射执行,还可以在分派过程中添加"前置通知"和后置处理(如在调用目标方法前校验权限,在调用完目标方法后打印日志等)等...转载 2019-11-08 15:59:40 · 218 阅读 · 0 评论 -
JVM:字节码生成技术与动态代理的实现。
“字节码生成”并不是什么高深的技术,读者在看到“字节码生成”这个标题时也先不必去想诸如Javassist、CGLib、ASM值类的字节码类库,因为JDK里面的javac命令就是字节码生成技术的“老祖宗”,并且javac也是一个由Java语言写成的程序,他的代码存放在OpenJDK的langtools/src/share/classes/com/sun/tools/javac目录中。要深入了解...转载 2019-11-08 10:11:27 · 220 阅读 · 0 评论 -
深入学习理解(1):java:ExecutorService invokeAll 任务的批量提交invokeAll两种方法的区别
ExecutorService的invokeAll方法有两种用法:1.exec.invokeAll(tasks)2.exec.invokeAll(tasks, timeout, unit)其中tasks是任务集合,timeout是超时时间,unit是时间单位两者都会堵塞,必须等待所有的任务执行完成后统一返回,一方面内存持有的时间长;另一方面响应性也有一定的影响,毕竟大家都喜欢...转载 2019-11-07 20:20:49 · 387 阅读 · 0 评论 -
Java反射完全解析
对于Java反射,平常工作中虽然经常用到,但一直以来都没有系统总结过,所以趁着目前有空总结一下,加深一下理解。如果发现谬误,欢迎各位批评指正。本文相关知识点大部分总结自Oracle官方文档,对于英文比较好的朋友,建议直接阅读原文档。按例,首先描述定义一下。Reflection enables Java code to discover information about t...转载 2019-11-07 17:12:24 · 463 阅读 · 0 评论 -
大白话说Java反射:入门、使用、原理
目录一个简单的例子 反射常用API 获取反射中的Class对象 通过反射创建类对象 通过反射获取类属性、方法、构造器 反射源码解析文章首发于【博客园-陈树义】,点击跳转到原文《大白话说Java反射:入门、进阶、原理》反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接...转载 2019-11-07 16:47:52 · 126 阅读 · 0 评论 -
Quartz集群原理及配置应用
1、Quartz任务调度的基本实现原理 Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现。作为一个优秀的开源调度框架,Quartz具有以下特点: (1)强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求; (2)灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式; (3...转载 2019-11-06 11:21:52 · 1552 阅读 · 0 评论 -
Java并发编程:Timer和TimerTask(转载)
下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: 1 2 3 4 5 6 Tim...转载 2019-11-01 17:37:16 · 115 阅读 · 0 评论 -
通过httpClient获取http接口返回数据并转换为泛型List
public static <T> List<T> getResultForArray(String url, Class<T> clazz) { List<T> re = null; try { String result = HttpClientUtil.doGet(url); ...原创 2019-08-06 15:58:29 · 4521 阅读 · 3 评论 -
怎么通过java去调用并执行shell脚本以及问题总结
摘要:该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发。 java开发的特点就是我们可以很早地进行TDDL, METAQ 等等地对接; 而脚本开发的特点就是在进行批处理的时候非常方便。该文章来自阿里巴巴技术协会(ATA)精选集背景我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要...转载 2019-05-09 10:44:04 · 675 阅读 · 0 评论 -
springboot学习(三)——使用HttpMessageConverter进行http序列化和反序列化
对象的序列化/反序列化大家应该都比较熟悉:序列化就是将object转化为可以传输的二进制,反序列化就是将二进制转化为程序内部的对象。序列化/反序列化主要体现在程序I/O这个过程中,包括网络I/O和磁盘I/O。那么什么是http序列化和反序列化呢?在使用springmvc时,我们经常会这样写:@RestController@RequestMapping("/users")pu...转载 2019-05-07 15:22:24 · 1980 阅读 · 0 评论 -
@JsonProperty的使用
@JsonProperty的使用jackson的maven依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3&...转载 2019-05-07 15:27:18 · 8691 阅读 · 0 评论 -
【Spring】HttpMessageConverter的作用及替换
【Spring】HttpMessageConverter的作用及替换2018年02月07日 08:59:58weknow619阅读数:248相信使用过Spring的开发人员都用过@RequestBody、@ResponseBody注解,可以直接将输入解析成Json、将输出解析成Json,但HTTP 请求和响应是基于文本的,意味着浏览器和服务器通过交换原始文本进行通信,而这里其实就...转载 2019-05-07 15:38:35 · 695 阅读 · 0 评论 -
@JsonProperty 失效问题的排查
@JsonProperty 是Jackson提供的一个用于注解属性、类、方法等的json注解。使用它可以改变Json序列化时属性的名称,一般默认使用属性名,比如如下的代码示例,如果没有使用@JsonProperty注解那么id转化为json为{“id”:11}.使用了则就是{“Id”:11}. @JsonInclude(Include.NON_NULL) pu...转载 2019-05-07 16:09:59 · 4453 阅读 · 0 评论 -
Spring Boot中Jackson ObjectMapper应用详解
Spring Boot支持与三种JSON mapping库集成:Gson、Jackson和JSON-B。Jackson是首选和默认的。Jackson是spring-boot-starter-json的一部分,spring-boot-starter-web中包含spring-boot-starter-json。也就是说,当项目中引入spring-boot-starter-web后会自动引入...转载 2019-05-07 18:06:29 · 5332 阅读 · 3 评论 -
Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。这个神器就是CommandLineRunner,CommandLineRunner接口的...转载 2019-05-10 16:55:58 · 241 阅读 · 0 评论 -
Mat 无法解析dump文件:Dominator tree not available. Open the Dominator Tree or delete indices and parse aga
打算用Mat分析dump文件的时候发现报错Dominator tree not available. Open the Dominator Tree or delete indices and parse again.查了下发现dump文件的同级目录存在一些临时文件,把临时文件删了就可以打开dump文件进行分析了...原创 2019-05-24 15:03:07 · 2916 阅读 · 0 评论 -
Cron表达式实例
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:Seconds Minutes Hours DayofMonth Month DayofWeek Year或Seconds Minutes Hours DayofMonth Month DayofWeek每一个域可出现的字符如下:Seconds:可出现", - ...转载 2019-05-21 10:25:48 · 427 阅读 · 0 评论 -
Could not attach to PID 问题解决
今天用jstat -gcutil pid 3000 1000 的时候发现无法执行Could not attach to pid查了下发现原来进程启动用户和自己jstat的用户不是同一个,切换该用户或者sudo jstat -gcutil pid 3000 1000 即可。...原创 2019-05-23 14:29:59 · 17874 阅读 · 1 评论 -
JVM源码分析之Jstat工具原理完全解读
概述jstat是hotspot自带的工具,和java一样也位于JAVA_HOME/bin下面,我们通过该工具可以实时了解当前进程的gc,compiler,class,memory等相关的情况,具体我们可以通过jstat -options来看我们到底支持哪些类型的数据,譬如JDK8下的结果是:-class-compiler-gc-gccapacity-gccause-gcmeta...转载 2019-06-07 18:23:31 · 494 阅读 · 0 评论 -
Java NIO系列教程(三) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIO Buffer相关...转载 2019-06-14 16:16:07 · 140 阅读 · 0 评论 -
深入浅出MappedByteBuffer
前言java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理在深入MappedByteBuffer之前,先看看计算机内存管理的几个术语:MMC:CPU的内存管理单元。...转载 2019-06-14 17:09:00 · 144 阅读 · 0 评论 -
jstat命令详解
stat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。jstat工具特别强大,有众多的可选...转载 2019-06-10 00:11:47 · 5053 阅读 · 0 评论 -
领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念:概念:VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来...转载 2019-06-25 20:12:53 · 217 阅读 · 0 评论