- 博客(21)
- 资源 (5)
- 收藏
- 关注
原创 解读Class类文件结构
语言无关性 语言无关系的关键在 于 JVM 和 字节码;Java虚拟机不与任何编译成class字节码的语言绑定,只要能够编译成有效的Class字节码都解析执行。一、Class文件结构 任何一个Class文件都对应着唯一 一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成)。问题: 当出现超...
2018-04-29 18:16:16 2147 3
原创 查询一张表中是否有重复数据行
查询一张表中是否有重复数据行 业务情景: 查询一张表中是重复数据;或者统计有几个列是否存在重复。查询sql按照某些字段进行分组统计,例如,可以按照主键等进行分组,就能统计是否有重复行。语句如下:select A,B from table1 group by A,B having count(*) > 1;案例分析 分析 kx_kq_channelsu...
2018-04-26 14:35:28 12623
原创 notepad++ 找不到 plugin manager
解决notepad++ 找不到 plugin manager想在 notepad++ 安装Hex-Editor , 却找不到 plugin manager,是因为缺少plugins manager 这个插件,手动下载安装即可:(一)下载 plugin manager 插件:点击下载(二)解压,将文件PluginManager.dll 拷贝到notepad++ 安装目录下的plugi...
2018-04-24 23:55:29 1728
原创 JConsole可视化工具介绍
JConsole 可视化工具介绍一、 JConsole介绍1.1 JConsole描述 Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具。1.2 启动JConsole点击JDK/bin 目录下面的jconsole.exe 即可启动然后会自动自动搜索本机运行的所有虚拟机进程...
2018-04-23 22:55:55 81399 13
原创 JDK的命令行工具
JDK的命令行工具介绍主要介绍 jps、jstat、jinfo、jmap、jhat、jstatc 等几个JDK命令行工具(JDK1.8 HotSpot)数据依据来源 用工具来分析数据,以此来获取结果。下面包含四个数据依据。运行日志异常堆栈GC日志堆转储快照(heapdump/javacore文件)线程快照(threaddump/hprof文件)在J...
2018-04-22 00:13:04 3208 2
原创 JVM知识点大杂烩
JVM知识点 概况: 本文总结一些JVM杂乱的知识点,以供参考1.JVM内存结构1.1 java虚拟机运行时数据区图1.1.1 虚拟机栈(VM Stack)调用一个方法会启用(创建)一个栈帧。栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法在执行的时候会创建一个栈帧(Stack Fram)java栈是一块线程私有的...
2018-04-19 00:35:11 579 2
原创 GC 日志、内存分配与回收策略介绍
GC 日志、内存分配和回收策略介绍 虚拟机之所以提供多种不同的收集器以及提供大量的调节参数,是因为只有根据实际应用需求、实现方式选择最优的收集方式才能获取最高的性能。没有固定的收集器、参数组合,也没有最优的调优方法。1 理解GC 日志描述: 每种虚拟机的日志格式不尽相同,但都维持共性1.1 GC日志注: 具体GC日志要参考具体的虚拟机和版本1.1....
2018-04-18 17:54:20 1851
原创 垃圾收集器(下)
垃圾收集器(下) 本文将介绍CMS和G1两款虚拟机1. CMS虚拟机1.1 基本描述:CMS(Concurrent Mark Sweep) 收集器是一种以获取最短回收停顿时间为目标的收集器特点: 老年代、并发收集、低停顿1.2 运行过程:从图可以看出需要经历四个过程:初始标记(CMS initial mark)并发标记(CMS co...
2018-04-17 00:02:00 203
原创 垃圾收集器(上)
垃圾收集器(上) 描述: java虚拟机规范并未对垃圾收集器的具体实现做规范,所以不同厂商、不同版本虚拟机实现不一致;但一般都会提供参数能够进行垃圾回收器之间的组合。前言注: 基于JDK1.7Update14之后的HotSpot虚拟机 新生代收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器:Serial Old、Paralle...
2018-04-15 19:25:21 519
原创 枚举根节点
GC Roots 枚举根节点 描述:GC Roots 被虚拟机用来判断对象是否存活。一、可以做为GC Roots的对象 位置 对象 虚拟机栈 栈帧中的本地变量表 本地方法栈 JNI(一般指的Native方法)引用的对象 方法区 静态属性引用对象 方法区 常量引用对象二、枚举根节点 可达性分析需要考...
2018-04-15 16:13:21 1798
原创 垃圾回收算法介绍
垃圾回收算法 本文简单介绍 标记--清除算法(Mark-Sweep) ,复制算法(Copying),标记--整理算法(Mark-Compact),分代收集算法(Generation Collection) 四种垃圾回收算法。一、标记–清除算法(Mark-Sweep)二、复制算法(Copying) 新生代中的对象98%都是“朝生夕死” ;所以并不需要按1:1...
2018-04-14 22:24:18 156
原创 如何确定对象为垃圾
如何确定对象为垃圾 通过引用计数、正向可达来判断对象是否是垃圾一、 引用计数 有一个引用,计数就添加1,失去引用就减一, 但是: 会有循环引用问题二、 正向可达 从roots对象(根对象)计算可达的对象。HotSpot采用了这种算法。 基本思路就是通过一系列成为 GC Roots 的对象作为起始点,向下搜索,所经过的路径叫做 引用链。 如果一...
2018-04-14 16:04:24 771
原创 JVM中OutOfMemoryError异常案例一方法区和直接内存
内存溢出之方法区和直接内存的介绍 通过实验来介绍方法区和直接内存区 的OOM一、方法区注:在JDK1.6 及以前版本中,由于常量池分配在永久代内,可以通过-XX:PermSize 和 -XX:MaxPermSize 限制方法区的大小,从而间接限制其中常量池的容量。 注意JDK1.8已经使用元空间 来代替永久区,所以在1.8中,这两个参数将被忽略,而改使用-XX:Metaspa...
2018-04-14 14:04:28 1784
原创 JVM中OutOfMemoryError异常案例一之栈溢出
虚拟机栈和本地方法栈溢出 在HotSpot 虚拟机中不区分 虚拟机栈和本地方法栈,对应HotSpot 来说,虽然设置了 -Xoss(设置本地方法栈大小) 参数,但不起作用, 只有 -Xss参数设置有效1. 两种异常如果线程请求的栈深度大于虚拟机所允许的最大深度,则抛出StackOverflowError异常如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMe...
2018-04-13 00:32:28 1370
原创 JVM中OutOfMemoryError异常案例一之堆溢出
JVM中OutOfMemoryError异常案例一之堆溢出 介绍java堆的OOM1. java堆溢出 Java堆存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么当对象到达堆内存允许的最大容量时就会报异常。1.1. 参数设置-XX:+HeapDumpOnOutOfMemoryError -XX:...
2018-04-12 23:13:12 1210 2
原创 JVM 中对象的访问定位
JVM 中对象的访问定位 对句柄访问对象、直接指针访问对象 的简单介绍主流的两种方式:句柄访问对象直接指针访问对象通过句柄访问对象: 注: 句柄池中包含了实例数据和类型数据,类型数据在方法区中直接指针访问对象 两种方式有各自优势:对于方式一而言,reference中存储的地址是稳定的地址,对象移动(垃圾回收时)不需要修改其值,仅需要修改...
2018-04-09 23:26:29 455
原创 JVM中对象的内存布局
JVM中对象的内存布局 简单介绍对象的内存布局对象的内存分布说明:1. 对象头Mark Word 非固定结构,32位虚拟机占32位,64位虚拟机占64位(占64位条件是没有开启压缩指针)类型指针,并非一定要有,与对象访问方法有关如果是数组,无法通过元数据信息确定java对象大小,这个时候就需要记录长度。2. 实例数据: 真正有效的数据存储顺...
2018-04-09 22:59:26 422
原创 对象的创建过程
对象的创建 简单介绍对象的创建过程1. JVM中对象的创建注意:普通Java对象的创建,不包括数组和Class对象等 的过程。 数组不能直接通过元数据本身信息确定大小,在对象头存储其长度值。分配策略: 针对多个线程则需要保证安全策略方法有二:对分配这个动作做同步策略(采用 CAS + 失败重试)使用本地线程分配缓冲(Th...
2018-04-09 22:00:26 154
原创 java虚拟机运行时数据区(下)
java虚拟机运行时数据区(下) 简单介绍 堆,方法区 和 直接内存1. java堆(java heap)1.1 描述: 几乎所有的对象都存放在堆中,且堆是自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要手动释放1.2 特征:内存最大的一块,一般也是针对这块进行性能调优存对象所有线程共享注:堆解构会有详细介绍。2. 方法区...
2018-04-08 20:16:38 173
原创 java虚拟机运行时数据区(上)
java虚拟机运行时数据区(上)注意:JDK1.7概况主要讲解虚拟机运行时数据区,看图说话。 1. 程序计数器(Program Counter Register)程序计数器相对于一个团队的指挥,团队指挥人数肯定少,所以程序计数器占比内存也小,但是却很重要;每个团队都有自己的指挥,不能说团队之间公用指挥,所以指挥对团队而言是私有的,所以程序计数器对 线程而言就是私...
2018-04-07 19:48:33 281
原创 JDK、JRE 和 JVM的区别
JDK、JRE 和 JVM的区别参考:Java Platform Standard Edition 7 Documentation 下图简单的展示了三者在组成上的区别简单总结:JDK > JRE > JVM 包含关系 JVM 最底层,编译解析字节码JRE 运行时环境 包括JVM ,类库、提供运行程序的组件运行程序,仅JRE足以JDK 包括...
2018-04-06 23:40:48 314
深入理解Java虚拟机JVM高级特性与最佳实践(第2版)含源码 + Java虚拟机规范(Java SE 7)
2018-06-04
《疯狂Java讲义》第三版注解处理器代码(下载需要配合博客,不建议直接下载)
2018-05-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人