
Java学习笔记
文章平均质量分 51
Java学习笔记
N3verL4nd
中年老男人~
展开
-
apache common-chain 简单使用
apache common-chain 是对责任链模式的简单实现责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。项目结构:拦截器需要实现Command接口基于 Spring 实现拦截器动态变更import com.google.common.collect.原创 2022-03-14 17:03:55 · 1735 阅读 · 0 评论 -
枚举在hessian序列化和反序列化中的问题
import com.caucho.hessian.io.*;import org.junit.Test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.Arrays;enum Color { WHITE, BLACK}public class EnumExample { @T原创 2022-03-12 15:56:30 · 3835 阅读 · 0 评论 -
Object 占用大小
oops: ordinary object pointerUseCompressedOops: 普通对象指针压缩UseCompressedClassPointers:类指针压缩(klass pointer)开启UseCompressedOops 默认开启UseCompressedOops,关闭UseCompressedOops 默认关闭UseCompressedClassPointers。一个对象在 jvm 中包括如下 4 部分:对象头klass pointer实例数据对齐填充(对象起原创 2021-11-19 20:11:41 · 295 阅读 · 0 评论 -
kafka
启动 zookeeper./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties关闭 zookeeper./bin/zookeeper-server-stop.sh -daemon ./config/zookeeper.properties启动 kafka./bin/kafka-server-start.sh -daemon ./config/server.properties停止 kafka./bin/kafk原创 2021-04-07 20:56:45 · 173 阅读 · 0 评论 -
AQS 学习记录
详细的分析可参考博客:https://javadoop.com/post/AbstractQueuedSynchronizer这里只对 AQS 做简单的测试。package concurrent;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantLock;/** * @author liguanghui02 * @date 2021/3/26 */public class原创 2021-03-31 20:54:02 · 262 阅读 · 0 评论 -
HashMap 分析(doing)
JDK8 中,HashMap 使用 数组+链表+红黑树来实现。getget(Object key) 的处理流程:计算 key 的 hash 值,根据 hash 值找到对应数组下标:hash & (table.length - 1)判断数组该位置处的元素(头结点)是否刚好就是我们要找的,如果不是,走第三步判断该元素类型是否是 TreeNode,如果是,用红黑树的方法进行查找;如...原创 2020-02-23 15:28:03 · 228 阅读 · 0 评论 -
java.net.URLClassLoader#findClass解析
jdk1.8 中 AppClassLoader 与 ExtClassLoader 都继承于 URLClassLoader。AppClassLoader 与 ExtClassLoader 没有重写 findClass 方法,URLClassLoader重写了 findClass 方法。故 findClass 都指向 URLClassLoader。protected Class<?&g...原创 2020-02-23 15:22:56 · 7595 阅读 · 2 评论 -
Java 对象占用大小
JDK8_64_HotSpot VM这个环境中的默认配置下,压缩对象指针(UseCompressedOops)和压缩类指针(UseCompressedClassPointers)都是打开的。java -XX:+PrintCommandLineFlags Test-XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:+Prin...原创 2020-02-23 15:16:26 · 361 阅读 · 0 评论 -
JDK8 实现重试
@FunctionalInterfacepublic interface Supplier<T> { T get();}@FunctionalInterfacepublic interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predic...原创 2020-02-23 15:11:59 · 524 阅读 · 0 评论 -
动态代理
jdkpackage com.meituan.test;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Hello { void sayHello();}class HelloImpl i...原创 2020-02-23 15:09:21 · 275 阅读 · 0 评论 -
调试中遇到的一个 bug
ConstantPool.getStringAt()## A fatal error has been detected by the Java Runtime Environment:## SIGSEGV (0xb) at pc=0x00000001059e73f6, pid=16016, tid=0x0000000000001803## JRE version: Java(TM...原创 2020-02-23 15:03:04 · 1854 阅读 · 0 评论 -
sun.misc.URLClassPath 解析
作用:Java 中加载类和查找资源的路径jdk8http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/8477fd88653c/src/share/classes/sun/misc/URLClassPath.javajdk9http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/9b93380c8445/src/...原创 2020-02-23 14:59:53 · 4565 阅读 · 0 评论 -
sun.misc.MetaIndex
作用:文件查找的快速拒绝机制public class MetaIndex { private static volatile Map<File, MetaIndex> jarMap; private String[] contents; // 是否是只包含 class 的 jar 包 private boolean isClassOnlyJar; ...原创 2020-02-23 14:51:46 · 607 阅读 · 0 评论 -
sun.misc.Launcher
针对 jdk1.8,jdk9 以后就没有该文件了。http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/raw-file/8477fd88653c/src/share/classes/sun/misc/Launcher.javapublic class Launcher { // 自定义通讯协议设计 private static URLStream...原创 2020-02-23 14:48:52 · 1857 阅读 · 0 评论 -
mac 编译 openjdk11
下载 openjdk 镜像hg clone https://hg.openjdk.java.net/jdk/jdk11/或者在 http://jdk.java.net/下载下载前置依赖brew install FreeTypebrew install Autoconf执行 configure 检查bash ./configure --with-target-bits=...原创 2020-02-23 14:42:54 · 856 阅读 · 0 评论 -
Java Classloader机制解析
Java 类加载器的功能java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称(全限定名),找到或者生成其对应的字节码,然后从这些字节码中定义出一个Java 类对象,即java.lang.Class类的一个实例。JDK中提供的ClassLoader1.Bootstrap ClassLoaderBootstrp加载器是用C++语言写的,它是在Java虚拟...原创 2017-12-06 18:02:36 · 743 阅读 · 0 评论 -
Java 集合系列01之 总体框架
Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)、。 Java集合工具包框架图(如下): 大致说明:看上面的框架图...转载 2017-12-19 16:07:12 · 397 阅读 · 0 评论 -
JVM中Java对象的创建
Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来,在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(仅限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?1. 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被原创 2017-12-20 21:15:57 · 594 阅读 · 0 评论 -
HotSpot Oop/Klass 模型
基于:openjdk-8-src-b132-03_mar_2014HotSpot JVM 没有将Java对象直接通过虚拟机映射到 C++ 对象,而是设计了一个 Oop/Klass 模型,其中 oop 为 Ordinary Object Pointer,用来表示对象的实例信息;klass 用来表示对象元数据信息,不是单指 Class 类的对象。为什么要设计 Oop/Klass 这种二分模型的...原创 2017-12-22 15:39:14 · 3388 阅读 · 0 评论 -
JVM学习笔记
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制下面将这两个部分进行详细学习Java代码编译是由Java源码编译...转载 2017-12-23 14:43:00 · 416 阅读 · 0 评论 -
2013阿里java代码初始化题目笔试题解析
public class T { public static int k = 0; public static T t1 = new T("t1"); public static T t2 = new T("t2"); public static int i = print("i"); public static int n = 99; public i原创 2017-12-31 15:13:36 · 485 阅读 · 0 评论 -
Java容器学习--Collection与AbstractCollection
JDK 1.8.0_151public interface Collection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] ...原创 2018-01-08 22:15:48 · 384 阅读 · 0 评论 -
Java容器学习--List与AbstractList
JDK 1.8.0_151ListList是继承于Collection的接口,它自然就包含了Collection中的全部函数接口;由于List是有序的容器,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、获取List中的子容器”等。public interface List<E> extends Collection<E> ...原创 2018-01-11 15:21:41 · 948 阅读 · 0 评论 -
Java容器学习--ArrayList源码分析
ArrayList 内部采用数组实现,是一种顺序存储方式,并且支持随机访问。本文分析基于 JDK 1.8.0_151 版本。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seria...原创 2018-01-12 11:00:15 · 367 阅读 · 0 评论 -
Java常量折叠
常量折叠是Java在编译期间做的一个优化,简单的来说就是在编译期就把一些表达式计算好,不需要在运行时进行计算。对于如下代码:String s1 = "a" + "b";int a = 1 + 3;java编译器在编译阶段会把值计算出来,也就会变成:String s1 = "ab";int a = 4;对于如下代码(使用javac编译)我们使用Luyten或者JD-G...原创 2018-01-13 14:25:23 · 797 阅读 · 0 评论 -
What does super.clone() do?
翻译自:https://www.pixelstech.net/article/1420629927-What-does-super-clone%28%29-doObject 类中声明了一个受保护的方法protected native Object clone() throws CloneNotSupportedException;它的作用是:使所有类在需要的时候可以对自己进行克...原创 2018-01-15 11:32:13 · 755 阅读 · 0 评论 -
栈帧、局部变量表、操作数栈
Copy From:http://wangwengcn.iteye.com/blog/16221951.定义栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 对于执转载 2018-01-15 13:16:54 · 1002 阅读 · 0 评论 -
java 标记接口
标记接口标记接口是计算机科学中的一种设计模式。它不含有任何属性和方法。其作用是:当某个类实现了这个接口的时候,我们就认为该类拥有了标记接口所描述的功能。其着眼点在于“标记”(标记拥有某一个功能),而“接口”只是作为一种实现方式。而注解是更加优雅的实现方式。Java中常见的几种标记接口Serializable这个接口是用来标记类是否支持序列化的,所谓的序列化就是将对象的各种信息转换成可以存储或者传输的原创 2018-01-16 10:29:47 · 671 阅读 · 0 评论 -
Java容器学习--LinkedList源码分析
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{}LinkedList 是一个继承于 AbstractSequentialList ...原创 2018-01-19 10:59:32 · 381 阅读 · 0 评论 -
Java容器学习--Vector&Stack源码分析
VectorStackStack 是栈。 它的特性是:先进后出(FILO, First In Last Out)。 Stack 继承于 Vector,所以它的实现也是基于数组。 Java已经不再推荐使用Stack,而优先使用 LinkedList 与 ArrayDeque。以上两个实现也都支持栈的操作。LinkedList基于链表;ArrayDeque基于循环队列。public class S原创 2018-01-20 11:01:28 · 329 阅读 · 0 评论 -
Java String 源码分析
基于 JDK 1.8.0_151public final class String implementsjava.io.Serializable,Comparable<String>,CharSequence {}在Java中,被 final 修饰符的修饰的类不允许被其他类继承。 所以 String 是不能被我们继承的。属性// 该值用于字符存储private final char val原创 2018-01-24 15:41:26 · 846 阅读 · 0 评论 -
String.intern 解析
基于 JDK 1.8.0_151intern 是 String.java 中的一个本地方法。 intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串的引用放入常量池中。String字符串作为一种对象也是保存在堆中。public native String intern();import java.util.*;public class Test...原创 2018-01-24 22:36:56 · 989 阅读 · 0 评论 -
Java中几种常量池的区分
全局字符串池(string pool也有叫做string literal pool)全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到 String Pool 中(记住:String Pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的)。 在HotSpot VM里实现的 String Po...原创 2018-01-25 14:56:15 · 566 阅读 · 0 评论 -
为什么如此获取 Java 数组的长度
public class Test { public static void main(String[] args) { int[] arr = new int[5]; System.out.println(arr.length); System.out.println("Hello".length()); }}为什么获取数组的...原创 2018-02-01 15:41:15 · 10504 阅读 · 2 评论 -
ArrayList.subList方法
List<String> list = new ArrayList<>();list.add("111");list.add("222");list.add("333");List<String> subList = list.subList(0, 2);System.out.println(subList); //[111, 222]ArrayL..原创 2018-03-08 15:57:49 · 2078 阅读 · 0 评论 -
idea个人配置记录
idea.properties # custom IntelliJ IDEA propertiesidea.config.path=D:/Intellij/.IntelliJIdea/configidea.system.path=D:/Intellij/.IntelliJIdea/systemidea.plugins.path=${idea.config.path}/plugin...原创 2017-03-23 10:16:21 · 1023 阅读 · 0 评论 -
Java中使用Comparable与Comparator实现比较
在java中要想对对象进行比较、排序,都需要实现Comparable或Comparator接口。实现Comparable接口要重写compareTo方法, 在compareTo方法里面实现比较。实现Comparator需要重写 compare 方法。Comparable接口:package java.lang;...public interface Comparab原创 2017-05-10 14:41:21 · 720 阅读 · 0 评论 -
Java集合与数组的转换
数组转化为集合使用Arrays.asList包装器可以达到这个目的。public static T> ListT> asList(T... a) { return new ArrayList;}如上所示,函数参数是Varargs(可变参数), 采用了泛型实现。同时由于autoboxing的支持,使得可以支持对象数组以及基本类型数组。不过在使用时,当传入基本数据类型原创 2017-05-11 10:18:52 · 610 阅读 · 0 评论 -
java迭代器解析
public interface IteratorE> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consum原创 2017-05-13 16:14:20 · 1489 阅读 · 0 评论 -
gradle项目与maven项目互转
maven to gradle在maven项目根目录下执行命令:gradle init --type pom当然你得先下载Gradle,配置完环境变量。gradle to maven gradle.build必须如下配置:apply plugin: 'java'apply plugin: 'maven' group = 'xxx.xxx'version =原创 2017-06-01 10:03:20 · 19864 阅读 · 0 评论