- 博客(13)
- 资源 (2)
- 问答 (3)
- 收藏
- 关注
原创 浅谈JVM - 内存结构(六)- 方法区
注:本文虽然讨论的是方法区,但是为了解答某些问题也涉及到了Class文件结构和类加载的相关知识java7及以前,方法区的实现是永久代,java8以后,方法区的实现是元空间6.1 定义方法区是java虚拟机规范中定义的一种概念上的区域,不同的厂商可以对虚拟机进行不同的实现。 方法区与堆有很多共性:线程共享、内存不连续、可扩展、可垃圾回收,同样当无法再扩展时会抛出OutOfMem...
2020-01-15 09:26:46
401
原创 浅谈线程池 - (一)Java并发包中的线程池
本文主要对线程池做初步的介绍以及讲解一些常用的线程池介绍线程池主要解决两个问题当执行大量异步任务时线程池能够提供较好的性能,在不使用线程池时,每当需要执行异步任务时直接new一个线程来执行,而线程的创建和销毁是需要开销的。线程池中的线程是可复用的,不需要执行异步任务时都需要重新创建和销毁线程。 线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等。每个Th...
2020-01-06 14:27:48
186
原创 Arthas实践 - 如何快速排查线上问题
此处不再赘述Arthas的安装,直接上使用技巧官网地址:https://alibaba.github.io/arthas/1. 查看线程信息thread查看当前线程信息,查看线程的堆栈参数说明参数名称 参数说明 id 线程id [n:] 指定最忙的前N个线程并打印堆栈 [b] 找出当前阻塞其他线程的线程 [i <val...
2020-01-02 17:54:35
5779
1
原创 浅谈JVM - 内存结构(五)- 堆
5.1 定义Heap 堆 通过new关键字,创建对象都会使用堆内存 线程共享的,堆中对象都需要考虑线程安全的问题 有垃圾回收机制 Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最大的一块,也被称为 “GC堆”,是被所有线程共享的一块内存区域,在虚拟机启动时被创建。 唯一目的就是储存对象实例和数组(JDK7 已把字符串常量池和类...
2019-12-31 11:27:19
322
原创 浅谈JVM - 内存结构(四)- 本地方法栈
本地方法栈(Native Method Stacks)与 Java 虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的 Native 方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。public native int hashCode(...
2019-12-30 19:15:30
240
1
原创 异步编程之美
在大学毕业后的工作期间,从最开始的编写同步代码,到慢慢为了提高系统性能,把一些任务使用异步的方式来处理,从而提高系统的响应时间,那么就会产生一些新的问题,如何监控在异步线程执行的任务的执行状态,是否出现了错误,出现了错误怎么处理,系统创建大量线程又该如何统一管理,这些种种问题都让使我意识到深入了解异步编程的必要性。 同步的代码, 在很多情况下, CPU其实是在等待中度过的...
2019-12-30 18:10:17
280
原创 浅谈JVM - 内存结构(三)- 虚拟机栈
2.1 定义Java Virtual Machine Stacks(Java虚拟机栈) Java 虚拟机栈描述的是 Java 方法执行的内存模型,用于存储栈帧,是线程私有的,生命周期随着线程启动而产生,线程结束而消亡 线程启动时会创建虚拟机栈,每个方法在执行时会在虚拟机栈中创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态连接、方法返回地址等信息。每个方...
2019-12-27 09:32:02
690
原创 浅谈JVM - 内存结构(二)- 程序计数器
1.1 定义Program Counter Register 程序计数器(寄存器) 定义:当前线程所执行的字节码的行号指示器,记住下一条执行JVM指令的地址 特点 线程私有的 多个线程运行同一套代码时,CPU会有一个调度器组件为不同线程分配时间片,在时间片内线程未执行完成就会将运行状态暂存,再切换到其他线程执行,如此循环执行。而程序计数器就是线程运行状态暂存的区...
2019-12-25 17:19:14
219
原创 浅谈JVM - 内存结构(一)- java7 到 java8 内存结构的变化
回顾java程序执行流程如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的J...
2019-12-20 18:05:42
961
2
原创 深入理解Java虚拟机(第三版)书评
作为一个大学毕业一年多的程序员,却已经为面试奔波了几十次,而不例外的是,每次都会问统一类问题,那就是JVM的相关知识,那时候就想为什么一个初级程序员都需要考这么复杂的问题,自己也尝试过去阅读JVM相关知识,可第一次阅读,觉得枯燥,根本看不下去,换了好几本书都看不懂,刚好又新出了深入理解Java虚拟机第三版,整本书从入门到复杂,慢慢带领我走入JVM的世界。 Java虚拟...
2019-12-18 14:08:02
1835
1
原创 SpringBoot集成log4jdbc定制sql输出
参考资料log4jdbc数据库访问日志框架使用(开源中国)https://my.oschina.net/cloudcoder/blog/420510log4jdbc使用介绍https://blog.youkuaiyun.com/u013409283/article/details/79219858LogBack 实例https://my.oschina.net/u/943316/bl...
2019-12-18 09:09:58
511
原创 浅谈JVM - 引言
什么是JVM 定义 Java Virtual Machine - java程序的运行容器(java二进制字节码的运行容器) 好处 一次编写,到处运行 当我们编写Java代码时,JVM为我们屏蔽了二进制字节码与底层操作系统的差异,采用解释的方式来运行二进制字节码,使得这份java代码可以在不同的操作系统运行,实现代码的平台无关性。 自动内存管理,垃...
2019-12-18 09:04:29
266
原创 全局异常处理及自定义异常:ErrorController与@ControllerAdvice区别和用法
参考资料springboot继承AbstractErrorController实现全局的异常处理 https://blog.youkuaiyun.com/qq_29684305/article/details/82286469 spring boot 原生错误处理ErrorController https://blog.youkuaiyun.com/shenyunsese/article/details...
2019-03-15 12:19:45
17842
6
小马哥 Spring Boot 2.0深度实践之核心技术篇
2019-07-11
spring源码深度解析 第二版 pdf
2019-03-15
如何计算静态变量的内存地址相对其Class对象内存地址的偏移量呢
2019-12-30
关于垃圾回收内存剩余的问题
2019-12-28
final方法和静态方法在元空间中的存储位置
2019-12-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人