自定义博客皮肤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 2757

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

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

2020-08-27 17:51:50 842

原创 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 262

原创 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 3719 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 272

原创 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 1641

原创 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 18338 12

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

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

2020-04-27 11:47:41 1140

原创 关于在线程池场景中使用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 1278

原创 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 1518

空空如也

空空如也

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

TA关注的人

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