java
文章平均质量分 96
S_H-A_N
这个作者很懒,什么都没留下…
展开
-
【Java】JDK动态代理实现原理
JDK的动态代理实现原理是在运行中动态生成代理类,这个代理类实现了Subject接口,在对代理类进行实例化的时候,需要传入InvocationHandler,当调用代理类的方法时,会执行InvocationHandler的invoke方法,在invoke方法中再执行真正的目标方法,从而完成代理功能。原创 2023-10-16 09:33:06 · 140 阅读 · 2 评论 -
【Java】Java中的零拷贝
计算机物理内存条的容量,比如我们买电脑会关注内存大小有多少G,这个容量就是计算机的物理内存。原创 2023-10-10 12:47:45 · 135 阅读 · 0 评论 -
【Java】 DirectByteBuffer堆外内存回收
当GC检测到对象的可达性发生变化时,会根据是否关联了引用队列来决定是否将状态更改为Pending或者Inactive,虚引用必须与引用队列结合使用,所以对于虚引用来说,如果它实际引用的对象需要被回收,垃圾回收器会将这个虚引用对象加入到一个Pending列表中,此时处于Pending状态。引用队列结合使用,在GC进行垃圾回收的时候,如果发现一个对象只有虚引用在引用它,则认为该对象需要被回收,会将引用该对象的虚引用加入到与其关联的。原创 2023-10-09 14:51:20 · 497 阅读 · 0 评论 -
【JAVA】普通IO数据拷贝次数的问题探讨
整个读取过程发生了两次数据拷贝,一次是DMA将磁盘上的文件数据拷贝到内核缓冲区,一次是将内核缓冲区的数据拷贝到用户缓冲区。在JAVA中,JVM划分了堆内存,平时创建的对象基本都在堆中,不过也可以通过NIO包下的ByteBuffer申请堆外内存无论是普通IO或者是NIO,在进行文件读写的时候一般都会创建一个buffer作为数据的缓冲区,读写相关方法底层是通过调用native函数(JNI调用)来实现的,在进行读写时将buffer传递给JNI。原创 2023-10-02 15:51:36 · 254 阅读 · 0 评论 -
Ribbon的ServerStats引起内存泄露问题总结
问题描述服务运行一段时间之后,出现页面卡顿加载慢的问题,使用top命令查看了服务器的使用情况,发现CPU飙高,接着查看了该进程中每个线程的占用情况,发现导致CPU高的线程是JVM垃圾回收的线程,然后使用jstat命令打印了GC的情况,基本隔几秒就进行一次FULL GC,每次FULL GC之后有大量的内存空间释放不掉,所以JVM内存空间很快又被耗尽再次进行GC。既然JVM在频繁的进行垃圾回收,接下来就要分析是什么原因造成的,使用jmap命令导出了一份内存快照,导入到Eclipse Memery Analy原创 2022-03-13 11:22:03 · 822 阅读 · 1 评论 -
使用itextpdf拆页遇到的问题总结
使用itextpdf拆页遇到的问题总结问题一:stream closed问题复现原因分析PdfCopy解决方案问题二:文件损坏问题复现最近使用了itextpdf对多页的PDF文件进行拆页,将它按页拆分,每一页对应一个PDF文件,在进行测试的过程中发现了两个问题:对OutputStream使用try-with-resoure的情况下,在finally中关闭document对象时,报stream closed错误。将拆页后的输出流转为输入流时,如果不调用document的close方法,会导致一部分数据原创 2021-10-31 22:05:37 · 1571 阅读 · 0 评论 -
xml转json的两种方法
1.第一种方法使用JSON-JAVA提供的方法(1)首先去git下载所需的java文件,并导入项目Git:https://github.com/stleary/JSON-java(2)使用XML.java中提供的XML.toJSONObject(xml)方法即可完成xml到json的转换,同时也可以对JSON进行格式化 /* 第一种方法,使用JSON-JAVA提供的方法 */原创 2016-11-22 21:28:44 · 57958 阅读 · 2 评论 -
java项目中引用本地其他项目的方式
假设有项目A和B,项目B中需要引用项目A1.Maven使用maven将项目A安装到本地仓库,然后在项目B中添加项目A的依赖。(1)创建maven项目Module-A,pom文件如下<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XML原创 2017-07-25 22:00:40 · 13991 阅读 · 2 评论 -
Ansj自定义词典
1.首先添加ansj的maven依赖 org.ansj ansj_seg 5.1.22.使用ansj测试分词public class WordSegmentTest { @Test public void wordTest(){ String str = "这是一段测试文字"; Result result=NlpAnalysi原创 2017-08-22 21:50:36 · 11181 阅读 · 10 评论 -
深入理解JVM笔记-演示OOM异常和SOF异常
1.堆中的OutOfMemory异常设置最大堆和Xmx最小堆Xms参数,通过不断的创建对象,当没有足够的空间创建新的对象时产生内存溢出异常-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails -XX:SurvivorRatio=8Xms:最小堆Xmx:最大堆Xmn:新生代的大小PrintGCDetails:打印GC日志SurvivorRatio:E...原创 2018-03-25 15:53:39 · 1068 阅读 · 0 评论 -
ArrayList源码
参考:jdk1.8.0_45源码解读——ArrayList的实现【Java集合源码剖析】ArrayList源码剖析从ArrayList的继承关系上看ArrayList的特点:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Clo...原创 2018-04-28 22:30:10 · 225 阅读 · 0 评论 -
HashMap源码
1.节点结构在哈希表中存储的元素的结构如下:hash:根据key的hash值,计算在哈希表(数组)中的索引key:Map中的key值value:Map中的valuenext:下一个节点的引用,由于会产生哈希冲突,hashmap采用链表(JDK1.8中增加了红黑树)解决冲突,如果根据hash计算出的索引位置处已经放有节点,但是节点的value与要加入的对象的value不同,将新节点使用尾插法插入(J...原创 2018-05-03 20:55:20 · 236 阅读 · 0 评论 -
Hashtable源码
1.Entry结构 HashMap的节点结构叫Node(JDK1.8,JDK1.8以前也叫Entry),Hashtable为Entry,都包含了四个相同的字段。private static class Entry<K,V> implements Map.Entry<K,V> { //hash值 final int hash; ...原创 2018-05-06 21:11:47 · 218 阅读 · 0 评论 -
LinkedHashMap源码
LinkedHashMap继承了HashMap,HashMap具有的特性LinkedHashMap也有。public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>LinkedHashMap与HashMap不同的是,除了拥有与HashMap一样的存...原创 2018-05-05 13:19:26 · 204 阅读 · 0 评论 -
LinkedList源码
LinkedList由双向链表实现,实现了List、Deque、Serializable、Cloneable接口,能被克隆和实例化。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Clo...原创 2018-04-30 15:01:13 · 347 阅读 · 0 评论 -
JAVA中的时间大小比较
1.时间的比较import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateTest { /** * @param args */ public static void m...转载 2015-12-17 22:44:14 · 56404 阅读 · 2 评论 -
Fastjson的简单使用
1.首先创建一个maven项目,pom文件中添加依赖 com.alibaba fastjson 1.2.31 2.创建一个classs类和student类package model;import java.util.List;public class Classs {原创 2017-05-13 22:36:35 · 564 阅读 · 0 评论 -
String和StringBuffer
1.String String是一个对象,一旦被创建,就不能再被改变。String 是final类,不能被继承。1)第一种创建方法String s1="123";String s2="123";System.out.println(s1==s2);Sting s1="123";在常量池中创建对象"123",然后将引用返回给s1,创建s2的时候,在常量池中查找是否有"12原创 2015-05-14 19:23:59 · 345 阅读 · 0 评论 -
equals()和hashCode()
Hashtable、HashSet、HashMap中存入的类都必须要实现equals()和hashCode()方法,TreeMap和TreeSet不需要。equals():默认比较的是两个对象的引用是否相同,即是否指向同一块内存,因为String、Integer等类型都对equals()方法进行了重写,所以调用equals的时候比较的是对象的内容是否相等。hashCode(原创 2015-05-15 13:04:28 · 346 阅读 · 0 评论 -
Java集合基础
1.CollectionCollection是一个接口Collections是一个类,并提供了一系列静态的方法实现对各种集合的搜索、排序等操作。Collection的两个子接口为List和Set.List:元素是有序的,并且允许重复。Set:无序,不能含有重复的元素。1)Collection接口的使用 public static void main(String原创 2015-05-15 11:20:26 · 903 阅读 · 0 评论 -
Json与bean的相互转换
本文使用json-lib jar包实现Json与bean的相互转换1.将字符串转为JSON使用JSONObject.fromObject(str)方法即可将字符串转为JSON对象使用JSONObject.put("attribute","value")可为JSON添加属性如果需要转为JSON数组,只需使用JSONArray对象提供的方法即可 /** *原创 2016-11-22 21:05:13 · 10856 阅读 · 0 评论 -
Dom4j解析XML
XML文件放在resources目录下<?xml version="1.0" encoding="UTF-8"?><CLASS> <STUDENT> <NAME value="name">zhangsan</NAME> <INTEREST value="i原创 2017-03-21 20:16:17 · 446 阅读 · 0 评论 -
bean转json时null字段不转换的方法
1.使用GSON时,默认不对null字段进行转换,而ObjectMapper和JSONObject默认对null字段进行转换(1)使用GSON时,对null字段进行转换的设置 Gson gsonSerializeNull = new GsonBuilder().serializeNulls().create();(2)使用ObjectMapper对null字段不进行转换的设置Obj原创 2017-03-13 20:13:25 · 8560 阅读 · 0 评论 -
Mac下安装JDK与Maven
刚使用MAC系统,记录一下JDK与Maven的安装1.安装JDK(1)从官网下载JDK安装包http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html我下载的版本是Mac OS X 版,下载完成之后直接双击安装就OK了,环境变量都没设置原创 2017-04-02 16:57:24 · 2952 阅读 · 0 评论