自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ConstXiong

记录编程实践...

  • 博客(34)
  • 资源 (7)
  • 收藏
  • 关注

原创 MyBatis insert 获取自增主键

1、建表语句create table user(id int PRIMARY KEY auto_increment,name varchar(400));2、Maven 依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apach.

2021-01-30 00:22:29 900 1

原创 MyBatis 批量插入

两种方式:sqlSessionFactory.openSession(ExecutorType.BATCH) 拼接批量 insert SQL 脚本1、Maven 依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/PO.

2021-01-29 07:56:21 344

原创 分页插件 Mybatis-PageHelper

MyBatis 的分页插件Mybatis-PageHelper官方文档:https://github.com/pagehelper/Mybatis-PageHelper/看下如何使用。1、Maven 依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht..

2021-01-28 22:36:50 316 2

原创 MyBatis 原生使用

结合官方文档,试了一下 MyBatis 原生使用。源码已上传到 githubhttps://github.com/ConstXiong/toy/tree/master/demo/mybatis1、maven 依赖,MySQL驱动 + MyBatis 3.5.5<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .

2021-01-28 22:33:52 1130

原创 Sharding-JDBC 实现分库分表

1、数据库环境ds0:172.31.32.184ds1:172.31.32.234用作分库2、在 ds0 和 ds1 库中建表,t_order0 和 t_order1 用做分表create table t_order0(order_id int primary key,user_id int,goods_id int,goods_name varchar(200));create table t_order1(order_id int primary key,use..

2021-01-27 08:05:54 377

原创 JDK1.8 中的日期与时间 API

为什么 JDK 1.8 之前的时间与日期 API 不好用?1、java.util.Date 是从 JDK 1.0 开始提供,易用性差 默认是中欧时区(Central Europe Time) 起始年份是 1900 年 起始月份从 0 开始 对象创建之后可修改 2、JDK 1.1废弃了 Date 中很多方法,新增了并建议使用java.util.Calendar 类 相比 Date 去掉了年份从 1900年开始 月份依然从 0 开始 选...

2021-01-26 22:39:50 673 1

原创 Sharding-JDBC 实现读写分离

Sharding-JDBC 是 apache 旗下的 ShardingSphere 中的一款产品,轻量,引入 jar 即可完成读写分离的需求,可以理解为增强版的 JDBC,现在被使用的较多。搭建项目maven 依赖的库<!-- 当前最新版 sharding-jdbc --><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardin

2021-01-25 21:15:49 321

原创 Arthas 体验

聊聊阿里的 Java 诊断工具—— Arthas。https://arthas.aliyun.com/doc/quick-start.html官方文档里的指令,基本都在测试环境跑了,线上我做了自动化脚本进行加强。教程的类就不写了,一来网上很多;二来官网的文档已经写的足够好,而且 issues 里还有用户提供的很多案例。其实教程我也记录了,放公司 bbs 里,涉及环境信息就不发链接了。重点分享几点感触: 现在但凡问我 JVM 相关问题的,我都让把《深入理解 Java 虚拟机》看三遍再..

2021-01-24 21:03:04 433

原创 Centos 7.4 编译 OpenJDK 8

看了网上一些教程,总会遇到各种问题。先把坑列出来坑1、安装 hg,下载 openJDK 8 的源码,我本地各种卡住不动,没法进行下去。 坑2、如果不使用hg,直接在官网下载的 tar.gz 压缩的源码是不完整,编译时报错,缺目录与文件。 坑3、安装 JDK7,只装 jre 不行,还需要 jdk。1、可以从 github 上下载源码,当时不是最新的,比如我找了一个版本https://github.com/openjdk/jdk/tree/jdk8-b120Centos 7.4 机器如..

2021-01-23 09:16:19 291 3

原创 MAT 分析堆内存快照

MAT 是基于 Eclipse 开发的 Java 堆内存快照分析工具。下载地址:https://www.eclipse.org/mat/downloads.php如果你分析的堆内存快照文件比较大,需要修改配置文件 MemoryAnalyzer.ini,我本地-Xmx4096m,即最大堆内存给的 4G。这几个视图使用较多: 打开文件默认显示概要 class 实例数列表 支配树视图,根据包路径分组 +深堆逆序,就能查到占用大量内存的对象 Q...

2021-01-22 00:39:26 796

原创 jclasslib 查看类信息

jclasslib 工具可以查看 class 文件的结构信息github 下载地址(借助下载工具会快些):https://github.com/ingokegel/jclasslib/releases/download/5.7/jclasslib_win64_5_7.exeTest.java 代码public class Test { public int test(int i) { return i+1; }}jclasslib 安装到本地,打开...

2021-01-21 08:07:24 607 1

原创 增大 MAT 堆内存

打开 MemoryAnalyzer 解压目录中 MemoryAnalyzer.ini 文件调大 -Xmx 参数,我本地默认 1024m,修改为 4096m,解决解析 dump 文件堆溢出的问题【Java学习资源】整理推荐Centos 7.4 编译 OpenJDK 8 MAT 分析堆内存快照 jclasslib 查看类信息 增大 MAT 堆内存 JVM 常用配置参数(Java 8) 40 道JVM面试题解答 JVM 问题排查常用指令 jvisualvm 远程连接...

2021-01-20 08:08:15 1833

原创 JVM 常用配置参数(Java 8)

日志-XX:+PrintFlagsFinal,打印JVM所有参数的值-XX:+PrintGC,打印GC信息-XX:+PrintGCDetails,打印GC详细信息-XX:+PrintGCTimeStamps,打印GC的时间戳-Xloggc:filename,设置GC log文件的位置-XX:+PrintTenuringDistribution,查看熬过收集后剩余对象的年龄分布信息dump 设置-XX:+HeapDumpOnOutOfMemoryError -XX:HeapD.

2021-01-19 00:33:31 1573 11

原创 40 道JVM面试题解答

1、对象在哪块内存分配?数组和对象在堆内存分配;某些对象没有逃逸出方法,可能被优化为在栈上分配2、谈谈 JVM 中的常量池JDK 1.8 开始字符串常量池:存放在堆中,包括 String 对象执行intern() 方法后存的地方、双引号直接引用的字符串运行时常量池:存放在方法区,属于元空间,是类加载后的一些存储区域,大多数是类中 constant_pool 的内容类文件常量池:constant_pool,JVM 定义的概念3、谈谈动态年龄判断这里涉及到 -X...

2021-01-19 00:32:56 3712 1

原创 JVM 问题排查常用指令

1、windows下查看 java 进程的启动参数jps (查到 java 进程 pid)wmic process 286492 get caption,commandline /value2、查看进程的启动时间ps -p 119252 -o lstart3、找到占用 CPU 过高的线程top 定位到占用 CPU 高的进程 PIDtop -H -p <pid> 或者 ps -mp <pid> -o THREAD,tid,time |..

2021-01-18 00:02:58 256 1

原创 jvisualvm 远程连接服务器 JVM

1、配置服务器的 jvm 启动参数,开启 jmx,用于 jvisualvm 工具远程连接-Dcom.sun.management.jmxremote-Djava.rmi.server.hostname=服务器ip-Dcom.sun.management.jmxremote.port=开启被 jvisualvm 连接的端口号-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=fal

2021-01-16 21:53:12 569

原创 闲来无事看个热闹,给 CSDN 2020 博客之星年度总评选排个序

js 代码var data = [];$('#blogList li').each(function(){ var tickets = $(this).find('em').html(); var html = '<li>' + $(this).html() + '</li>'; data.push({tickets:parseInt(tickets), html:html});})for (var i = 0; i < data.length; i+

2021-01-15 12:30:45 1921 4

原创 字节码指令分类

1、加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传输 将一个局部变量加载到操作栈:iload、iload_<n>、lload、lload_<n>、fload、fload_<n>、dload、dload_<n>、aload、aload_<n> 将一个数值从操作数栈存储到局部变量表:istore、istore_<n>、lstore、lstore_<n>、fstore、fstore_<n

2021-01-15 00:14:51 538

原创 -verbose:gc 和 -XX:+PrintGC 的区别

-verbose:gc 和 -XX:+PrintGC两者功能一样,都用于垃圾回收时信息打印-verbose:gc 是稳定版本的参数;-XX:+PrintGC,由于是-XX 开头可能在未来版本删除非稳定-verbose:gc 无法运行时关闭;-XX:+PrintGC 是manageable,可以通过 api(com.sun.management.HotSpotDiagnosticMXBean) 或工具 JConsole、jinfo 运行时关闭参考:https://www.o...

2021-01-15 00:14:06 1390 1

原创 JVM字节码指令表

字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07

2021-01-14 07:39:10 426

原创 图解 Class 文件结构

代码:publicclassTest{publicinttest(inti){returni+1;}}用 Notepad++ 的Hex-Editor 插件打开Test.class 文件下图是我手工标记的 Test.class 文件的结构理论依据来自上一篇文章《Class 文件的结构》JDK 的 bin 目录中的工具 javap,是 Java class文件分解器,可以反编译,也可以查看 java 编译器生成...

2021-01-13 07:39:04 300

原创 Class 文件的结构

Class 文件包含了 Java 虚拟机的指令集、符号表、辅助信息的字节码(Byte Code),是实现跨操作系统和语言无关性的基石之一。一个 Class 文件定义了一个类或接口的信息,是以8 个字节为单位,没有分隔符,按顺序紧凑排在一起的二进制流。用 "无符号数" 和"表"组成的伪结构来存储数据。 无符号数:基本数据类型,用来描述数字、索引引用、数量值、字符串值,如u1、u2 分别表示 1 个字节、2 个字节 表:无符号数和其他表组成,命名一般以 "_info"结尾 ...

2021-01-12 08:04:16 252

原创 JVM 故障处理工具列表

jps 显示系统所有虚拟机进程信息的命令行工具 jstat 监视分析虚拟机运行状态的命令行工具 jinfo 查看和调整虚拟机参数的命令行工具 jmap 生成虚拟机堆内存转储快照的命令行工具 jhat 显示和分析虚拟机的转储快照文件的命令行工具 jstack 生成虚拟机的线程快照的命令行工具 jcmd 虚拟机诊断工具,JDK 7 提供 jhsdb 基于服务性代理实现的进程外可视化调试工具,JDK 9 提供 JConsole

2021-01-11 22:18:14 1907 3

原创 HotSpot 内存分配的主要规则

分配与回收,是 Java 虚拟机自动管理内存的两个部分。之前提的垃圾内存回收的三种算法与常见的垃圾收集器,这些都是内存的回收,那 JVM 是如何分配内存呢?Java 虚拟机规范并没有规定对象的创建和存储的细节,每款收集器都有各自的实现。我本地环境是:JDK 1.8、64 位、win7、HotSpot 默认 JVM 配置Parallel Scavenge + Parallel Old 组合,会加参数改收集器1、新对象,一般会优先被分配到新生代Eden区,当 Eden ...

2021-01-11 00:48:18 356

原创 开启 GC 日志

之前写过一个例子,展示对象循环引用仍然会被 JVM 的垃圾收集器回收。代码如下:packageconstxiong.jvm.gc;/***引用计数*/publicclassReferenceCount{publicReferenceCountholder;/***占用5M*/privatebyte[]appendMemory=newbyte[5*1024*1024];publi...

2021-01-10 08:31:14 1269

原创 垃圾收集器及特点

Serial特点: JDK 1.3 开始提供 新生代收集器 无线程交互开销,单线程收集效率最高 进行垃圾收集时需要暂停用户线程 适用于客户端,小内存堆的回收 ParNew特点: 是 Serial 收集器的多线程并行版 JDK 7之前首选的新生代收集器 第一款支持并发的收集器,首次实现垃圾收集线程与用户线程基本上同时工作 除Serial 外,只有它能与CMS配合 Parallel Scaven...

2021-01-09 08:43:12 253

原创 JVM垃圾回收算法

前一篇提到了判断内存对象是否可回收的两种算法:Reference Counting GC、Tracing GC。从垃圾内存的回收角度看,大部分垃圾收集器遵从了分代收集(Generational Collection)理论。其包含 3 个经验假说: 绝大多数对象都是朝生夕死 熬过越多次垃圾收集过程的对象就越难消亡 跨代引用相对于同代引用来说仅占极少数 基于以上假说 常用的收集器把 Java Heap 划分为不同的区域,根据对象熬过的回收次数,分配到不同的内存..

2021-01-08 08:12:40 170

原创 什么样的 Java 对象会被当垃圾回收?

Java 是一门不需要自己手动控制内存释放的语言。那在程序运行中,它是如何判断哪些内存可以回收呢?从 JVM 的实现角度总体来看 主要考虑的是堆内存区域的 Java 对象的回收 一般使用可达性分析算法,通过 GC Roots 找到不可达对象进行回收 回收对象时需要考虑对象被引用的强度 回收对象前,会调用对象的 finalize() 方法,若在方法里把当前对象赋值给其他变量引用,会有且仅有一次避免被回收的机会 可回收内存区域JVM 在运行的内存分配区..

2021-01-07 21:38:51 1439

原创 内存溢出复现

开发与生产环境经常会遇到内存溢出的错误感觉都差不多,其实 JVM 每个内存区域发生 OOM 的原因还是差异的。JVM 的内存区域中,一般只有程序计数器这个区域不会发生内存溢出,虚拟机栈、本地方法栈、堆、方法区、直接内存都会发生 OOM。结合《深入理解Java虚拟机》里的示例,我在本地复现了各种 OOM。操作系统:win 7JDK:7 和 8 都有,都是 64 位,版本号分别为 1.7.3、1.8.141默认 JAVA_HOME 是 JDK 1.8.1411、虚拟机栈溢出Sta...

2021-01-07 08:10:13 379

原创 HotSpot VM 中对象的内存分析

对象的内存布局HotSpot VM 中,对象在堆内存中的存储布局分为: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 1、对象头 Mark Word,对象运行时数据,动态定义位数据。包含 HashCode、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等。32 位和 64 位的 VM 里 Mark Word 的长度分别 32 bit 和 64 bit。 类型指针,对象指向所属 clas.

2021-01-07 08:09:23 233

原创 JVM 控制的内存区域

主要分为 3 块:线程私有区域(程序计数器、虚拟机栈、本地方法栈) 线程共享区域(堆、方法区) 直接内存(不是 JVM 运行时数据区域的一部分。如 JDK 中的 nio 使用本地函数库分配堆外内存,使用缓冲区进行这块内存的读写)3 块内存区域的生命周期:线程私有区域,随着用户线程的启动而创建,线程的结束而销毁。 线程共享区域,随着虚拟机的启动而创建,虚拟机的停止而销毁。 直接内存,通过本地函数库 Unsafe 分配与释放内存。线程私有区域1、程序计数器(Program..

2021-01-06 08:30:14 178

原创 JVM家族

继Java版本与功能的发展史,再来理一理其间出现过的虚拟机。 Classic VM,JDK 1.0,第一款商用 JVM,纯解释执行。 Exact VM,JDK 1.2,准确式内存管理,性能比 Classic VM 明显提高。 HotSpot,JDK 1.3 默认使用,Longview Technologies 公司设计,被 Sun 收购,被广泛使用。 JRockit,BEA System 公司开发,专注服务端的虚拟机,不包含解释器,被 Oracle 收购。 ...

2021-01-05 22:10:15 376

原创 Java 的发展史

从 Java 的前身 Oak 创建开始计算,到现在的 Java SE 15,已经快 30 年了。从第一个发布版本算起,也有 25 年多了。1991.4,Java 之父 James Gosling 领导绿色计划,构建了 Java 语言的前身 Oak,Oak 得名于高司令办公室外的一棵橡树。1995.5,Oak 改名为 Java,正式发布 Java 1.0 版,提出"Write Once,Run Anywhere"。1996.1,JDK 1.0 发布,提供了一个纯解释执行的Java...

2021-01-05 22:09:32 265

原创 常见 JVM dump 指令

1、查看 Java 进程jps2、jrockit dump 操作jrcmd<pid>hprofdumpfilename=/test.hprof3、jstack dump 线程栈信息jstack<pid>>test.dump参数:jstack[-l]<pid>:连接到一个运行中的进程jstack-F[-m][-l]<pid>:连接到一个挂起的进程jstack[-m][-l]...

2021-01-05 22:08:06 5123

eclipse使用教程ppt

ppt版,eclipse的使用教程。简单介绍了eclipse的使用。

2018-09-03

Eclipse入门教程

eclipse的入门教程,介绍了如何使用eclipse开发java项目。

2018-08-31

JasperReport中文用户手册

JasperReport是一款开源报表引擎,用纯java编写。文档是对JasperReport的介绍。包含设计工具和模板文件等...

2018-08-30

无线wifi破解教程

简单介绍了wifi的工作原理。讲解了如何使用破解工具,搭建工作环境。使用字典破解wifi的密码。

2018-08-30

空空如也

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

TA关注的人

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