自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 java中实现数组越界判断和获取数组长度的实现

1. 背景介绍java中的数组比c语言中的数组, 多了两个很重要的功能当索引越界时, 会自动抛出ArrayIndexOutOfBoundsException, 避免一错再错另一个很重要的方法是获取数组长度这两个功能都不是通过java代码层面实现的, 而是在jvm中通过c++来实现的. 本文就针对这连个点来一探究竟2. 原始java代码public class TestArrayIndexOutOfBoundsException { public static void main(St

2020-10-12 19:29:08 2449

原创 在java中找到被吃的异常

1. 背景介绍在开发过程中, 遇到平台代码不规范的写法(如下图), 将异常直接吃掉, 或者吞掉了详细堆栈. 当生产运行到这段代码时, 抛出的信息非常少, 而且不知道是哪行代码抛出的异常, 排除问题非常困难. 为解决这个问题, 想到了一个好办法.2. 解决思路将jdk中的java.lang.Exception类重写. 在本机创建Exception这个类, 并在构造器中将堆栈输出package java.lang;public class Exception extends Throwabl

2020-08-27 17:51:50 675

原创 java中Lock相关类实现的探索(非synchronize)

1. 背景介绍都知道synchronize是通过markword相关机制实现同步, 众所周知java中还有另一种同步机制, 就是通过Lock相关类来实现, 今天我们就以ReentrantLock来探索一下java对Lock的具体实现方式2. 源码追踪2.1 ReentrantLock的源码分析ReentrantLock内部实现了两种锁机制, 一种是公平锁, 一种是非公平锁. 当调用无参构造器时, 采用的是非公平锁 public ReentrantLock() { sync = n

2020-07-23 18:52:20 187

原创 java Object的hashCode方法的计算逻辑

1. 背景介绍在为重写hashCode方法的时候, 看到hashCode打印出的数据像是一个地址值, 很是好奇. 加之最近在研读jvm源码, 特此一探究竟, 看看在hotspot中hashCode究竟是如何实现的2. 调用过程梳理1. java的Object代码public native int hashCode();通过官产jdk的Object.class的源码, 发现hashCode被native修饰. 因此这个方法应该是在jvm中通过c/c++实现2. jvm的hashCode相关代码

2020-07-10 18:10:59 3317 2

原创 对java几种内部类的分析

1. 背景介绍在sonar扫描代码时, 有个内部类未使用到外部类的非静态成员, 推荐我们将此内部类修改改静态内部类, 因而本文来探究一下各种内部类的差异已经使用场景2. 内部类分析分析使用代码的package com.test;public class TestInnerClass { private int outer;// 非静态内部类 public class InnerClass { int a = outer + 1; priva

2020-06-05 17:43:30 174

原创 java中cas实现的探索

1.背景简介当我们在并发场景下,增加某个integer值的时,就涉及到多线程安全的问题,解决思路两个将值增加的方法使用同步代码块同步使用AtomicInteger,来逐步增加其值这两种实现方式代码如下import java.util.concurrent.atomic.AtomicInteger;public class CASTest { private static AtomicInteger countAI = new AtomicInteger(0); privat

2020-05-31 12:15:03 1537

原创 SecureRandom.getInstanceStrong()引发的线程阻塞问题分析

1. 背景介绍sonar扫描到使用Random随机函数不安全, 推荐使用SecureRandom替换之, 当使用SecureRandom.getInstanceStrong()获取SecureRandom并调用next方式时, 在生产环境(linux)产生较长时间的阻塞, 但开发环境(windows7)并未重现2. 现象展示使用测试代码:package com.youai.test;import java.security.NoSuchAlgorithmException;import jav

2020-05-15 19:04:15 16567 12

原创 java 两种lambda表达式的区别

1. 背景介绍在进行sonarqube扫描代码优化时, 有给出如下的提示改进建议将 b -> b.getName()这种形式修改为B::getName, 就引申出来如下思考:为何后一种书写形式比前一种更高效?既然后一种更高效, 那前一种有何存在价值?本文接下来就围绕这个两个问题进行探讨2. 两种表达式字节码的分析2.1 使用的测试代码如下:package com.you...

2020-04-27 11:47:41 1000

原创 关于在线程池场景中使用ThreadLocal导致OOM的一点分析

1. OOM场景分析测试oom使用的类package com.concurrency.thread;import com.concurrency.MyFixSizeThreadPool;import org.junit.Test;import java.io.IOException;import java.util.ArrayList;import java.util.List;...

2020-04-17 18:45:28 1114

原创 java中boolean类型基础数据在内存中占用的空间大小分析

boolean对象到底占用多少内存0. 本文所用的java代码package com.youai.test;import org.openjdk.jol.info.ClassLayout;/** * VM argument: E:\Java\jdk1.8.0_144\bin\java.exe * -XX:+UnlockDiagnosticVMOptions #针对product版本的...

2020-04-15 18:48:59 1295

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除