![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
文章平均质量分 91
西红柿系番茄
知其然,知其所以然。
展开
-
Java线上问题排查
1、CPU使用率高模拟代码 public static void main(String[] args) { while (true) { // run } }2、内存占用高3、内存溢出原创 2021-06-12 23:20:58 · 1526 阅读 · 2 评论 -
模块化开发---实现模块的动态加载与卸载
在工作中,由于我是主要负责直播APP的运营活动开发,这些活动代码有两大特性活动周期短,通常只是一个节日、一个星期、十天、一个月等,所以导致代码用于运行的时间短。原创 2021-05-30 17:13:25 · 1629 阅读 · 4 评论 -
字节码操纵技术探秘
大家可能已经非常熟悉下面的处理流程:将一个“.java”文件输入到 Java 编译器中(可能会使用 javac,也可能像 ANT、Maven 或 Gradle 这样的构建工具),编译器对其进行分析,最终生成一个或多个“.class”文件。图 1:什么是 Java 字节码?如果从命令行中运行构建,并启用 verbose 的话,我们能够看到解析文件直到生成“.class”文件这一过程的输出...转载 2019-11-08 16:32:47 · 472 阅读 · 0 评论 -
利用Aspect/Javassist/动态代理/Lombok等方式省略Controller的参数校验结果处理代码
开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。那么有什么办法可以省去这么繁琐的工作呢?当然,利用自定义注解和Spring AOP可以做到,参考我的另一篇博客:利用自定义注解和Aspect实现方法参数的非空校验。但是,自己弄有点重复发明轮子的意思,因为spring已经提供了一套完整的validat...原创 2019-01-19 00:46:26 · 1571 阅读 · 0 评论 -
字节码操纵技术——Javassist
一、背景编程语言有静态语言和动态语言之分,例如:C、C++、Java等属于静态语言,JavaScript、Ruby、Python等属于动态语言。动态语言的灵活性非常高,遗憾的是,至今为止,作为Java程序员的我尚未享受到动态编程的乐趣。不过,Java也逐步提供了一些有限的动态编程机制,主要有下面三个方面: (1) 反射 (2) 动态编译 (3) 调用Jav...原创 2018-12-30 19:00:58 · 2314 阅读 · 2 评论 -
利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性
作为一名专门写bug的Java程序猿,相信大家都会遇到过这样的问题:项目的业务逻辑很复杂,而且还经常变化,今天的一个办理条件是小于5,明天就变成了大于10或者条件作废。这就很头疼了,里面的数字可以抽取到配置文件,但是大于和小于呢?条件作废呢?对于业务规则的复杂性,我们可以使用一些规则引擎来解决代码可读性差的问题。市面上也有不少的规则引擎框架,开源的不开源的,收费的不收费的,我们这里推荐使用的是...原创 2018-12-19 17:05:43 · 16616 阅读 · 14 评论 -
自定义maven插件:自动生成API的word文档
继上次开发完Maven插件开发:根据库表生成实体类&根据实体类生成库表之后,博主对开发maven插件喜爱得一塌糊涂。这不,今天给大家带来了《自定义maven插件:自动生成API的word文档》。老规矩,先上镇楼图。(读者们也可以研究下Swagger2生成doc文档)开门见山,直接上开发教程!首先是插件配置:<plugin> &l...原创 2018-07-29 23:47:35 · 5191 阅读 · 9 评论 -
Java的Class初始化顺序
先看代码及运行结果:/** * 接口 * @author z_hh * @time 2018年8月12日 */public interface Reader { // 默认public static final String INTERFACE_FINAL_VAR = getAction(); static String getAction() { System....原创 2018-08-12 16:34:35 · 245 阅读 · 0 评论 -
JVM垃圾回收与性能调优
一、JVM内存结构图片来源于网络1、方法区方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,描述为堆的一个逻辑部分,称为非堆(HotSpot中也称为永久代)。该区域包含运行时常量池。Java8之后改为元空间(MetaSpace),直接分配物理内存。对这块内存的GC条件很苛刻,基本认为不会进行。2、堆堆是被所有线程共享的一块内存区域,是...原创 2018-08-14 00:37:03 · 1554 阅读 · 1 评论 -
《深入理解Java虚拟机》知识点总结
一、走进JavaJava技术体系包括虚拟机、Java API、Java编程语言、第三方Java框架。在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。Java程序设计语言、Java虚拟机、Java API类库统称为JDK。二、Java内存区域与内存溢出异常Java运行时的数据区域线程共享:方法区、堆线程隔离:虚拟机栈、本地方法栈、程序计数器程序计数器是当...原创 2018-08-12 14:15:44 · 8383 阅读 · 1 评论