jvm
wu_yangchun
只要开始,永远不晚。
展开
-
JVM优化--优化gc
什么时候需要排查gc问题我们遇到什么样的现象会怀疑gc有问题,进而优化呢?gc问题大体上可以分为两类:内存溢出、gc不健康。内存溢出一般会借助dump文件进行查看,设置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/system/error.dump可以在发生oom时给出dump信息。有了dump信息可以使用MAT,Jprofile,jvisualvm 进行排查。gc不健康主要表现在这么几个方面:young gc频原创 2020-06-15 11:16:07 · 1888 阅读 · 0 评论 -
JVM知识整理
对JVM的知识用脑图进行了整理 JVM原创 2018-07-24 19:49:17 · 167 阅读 · 0 评论 -
JVM(9)编译器与编译优化
前端编译器:java -> class 后端编译器:class -> 机器码class文件生成过程: 1、解析与填充符号表。 2、处理注解。 3、分析生成字节码。前期优化: 前期的优化主要靠语法糖来实现,包括: 1、泛型与类型擦除。 2、自动装箱、拆箱、遍历循环。 3、条件编译。晚期优化: 晚期优化主要靠即时编译器来实现,将热点代码编译为平台相关的机器码,并优化。HotSpot虚拟原创 2017-11-03 16:05:47 · 459 阅读 · 0 评论 -
JVM(8)Tomcat类加载器架构
主流web服务器需要解决以下几个问题: 1、可隔离:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互隔离。 2、可共享:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互共享。 3、服务器安全:服务器本身也有依赖的类库,要保证服务器自身的安全不受部署的web应用程序影响。 4、支持jsp热替换:jsp由于其纯文本存储的特性,运行时修改的概率远大于原创 2017-10-26 19:00:35 · 295 阅读 · 0 评论 -
JVM(7)虚拟机字节码执行引擎
不同执行引擎在执行java代码的时候可能会有解释执行和编译执行两种选择,也可两者兼备。但是从外观上看,java虚拟机执行引擎都是一致的:输入字节码文件(class文件),处理过程是字节码解析,输出的执行结果。运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,在虚拟机栈中。 每一个栈帧都包括局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。 局部变量表:用于存放方原创 2017-10-25 19:21:53 · 294 阅读 · 0 评论 -
JVM(6)类加载器
加载步骤中虚拟机需要完成以下三件事: 1、通过一个类的全限定名来获取定义此类的二进制字节流。 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 其中实现“通过一个类的全限定名来获取定义此类的二进制字节流”这个步骤的代码模块称为类加载器。每一个类加载器,都拥有一个独立的原创 2017-10-20 17:20:42 · 171 阅读 · 0 评论 -
JVM(5)类的生命周期
类的生命周期 加载、验证、准备、初始化、卸载的开始顺序是固定的,解析有可能在初始化之后(动态绑定)。这几个步骤并不等一个完成另一个才开始,而是可能交叉进行。加载:类加载的时机: 1、使用new关键字实例化对象的时候、读取或设置类的静态字段(被static修饰且未被final修饰)的时候,调用类的静态方法的时候。 2、使用反射的时候。 3、初始化一个类时,如果父类没有加载,先加载父类。 4、原创 2017-10-19 17:24:04 · 252 阅读 · 0 评论 -
JVM(4)类文件结构
class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,中间没有分隔符。 class文件格式: 类型 名称 数量 描述 u4 magic 1 魔数 u2 minor_version 1 次版本号 u2 major_version 1 主版本号 u2 constant_pool_c原创 2017-10-19 16:06:39 · 218 阅读 · 0 评论 -
redis生存时间
redis生存时间EXPIRE命令EXPIRE命令设置失效时间,单位秒。redis>set session:1 aaaOKredis>expire session:1 900(integer) 1TTL命令查看还有多长时间失效redis>SET foo barOKredis>EXPIRE foo 20(integer) 1redis>TTL foo(integer) 15redis原创 2016-12-02 16:44:42 · 613 阅读 · 0 评论 -
JVM(3)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略堆空间回收引用计数法可达性分析算法finalize方法方法区回收垃圾收集算法HotSpot的算法实现垃圾收集器垃圾收集器参数总结内存分配与回收策略垃圾收集器与内存分配策略垃圾回收需要解决的核心问题:哪些内存需要回收?什么时候回收?如何回收? 下面我们针对这三个问题进行分析。堆空间回收引用计数法给对象添加一个引用计数器,当有一个地方引用它时,计数器+1,当原创 2016-11-12 10:14:08 · 296 阅读 · 0 评论 -
JVM(2)对象分配、布局、访问
对象分配布局访问探讨HotSpot虚拟机在java堆中对象分配布局访问的全过程对象的创建1类加载检查2为新对象分配内存划分空间线程安全3内存初始化为零值4对对象进行必要设置5执行init方法对象的内存布局1对象头2实例数据3对齐补充对象的访问定位句柄直接指针对象分配、布局、访问探讨HotSpot虚拟机在java堆中对象分配、布局、访问的全过程对象的创建对象的创建总体而原创 2016-11-07 23:12:31 · 449 阅读 · 0 评论 -
JVM(1)JVM介绍
JVM介绍JVM是什么JDKJREJVM之间的关系主流JVM有哪些JVM内存模型程序计数器虚拟机栈本地方法栈堆区方法区JVM内存划分JVM介绍JVM是什么?JVM,java virtual machine,即java虚拟机,是运行java class文件的程序。java语言使用java虚拟机屏蔽了与平台相关的信息,使得java代码只需要进过编译,就可以运行在部署了JVM的平台上。原创 2016-11-01 22:42:56 · 770 阅读 · 0 评论