![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
sdfsdfsdfgfgh
这个作者很懒,什么都没留下…
展开
-
虚拟机字节码执行引擎
执行引擎在执行字节码的时候,通常会有解释执行和编译执行。输入的是字节码二进制流,输出的是执行结果。Java虚拟机以方法作为最基本的执行单元,“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构。每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法返回地址和一些额外的附加信息。...原创 2022-01-12 16:53:53 · 241 阅读 · 0 评论 -
类加载机制
在Java,类型的加载,连接,初始化都是在程序运行期间完成的。Java语言可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。类加载到虚拟机内存,到卸载出内存为止,整个生命周期有七个阶段。其中,验证,准备,解析这三个阶段,属于连接的三个部分。需要注意的是,解析阶段可能在初始化之后开始(Java语言的运行时绑定。通常情况下这些阶段都是相互交叉混合进行,会在一个阶段执行的过程中调用激活另一个阶段)加载(通过类的全限定名获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构原创 2022-01-11 22:25:11 · 63 阅读 · 0 评论 -
字节码指令
JVM采用面向操作数栈的架构,大多数指令都不包含操作数,指令参数都存放在操作数栈中。JVM的操作码长度为1字节,在处理长度超过1字节的数据时,不得不在运行时从字节中重建出具体数据的结构,例如要将一个16位长度的无符号整数使用两个无符号字节存储起来。并非每种数据类型和每一种操作都有对应的指令。加载和存储指令用来将数据在栈帧中的局部变量表和操作数栈之间来回传输。运算指令。类型转换指令。对象创建与访问指令。操作数栈管理指令。控制转移指令。异常处理指令。同步指令。原创 2022-01-11 00:33:17 · 93 阅读 · 0 评论 -
Class类文件结构
Class文件中采用一种类似于C语言的结构体的伪结构来存储数据,结构中只有两种数据类型1 无符号数:基本数据类型,u1,u2,u3,u4来代表1个字节,2个字节,4个字节,8个字节的无符号数。2 表:由多个无符号数或者其他表构成的复合数据类型,名字以“_info”为结尾。Class文件格式(《深入理解Java虚拟机》周志华)类型 名称 数量 u4 magic 1 u2 minor_version 1 u2 major_version原创 2021-12-31 00:46:59 · 572 阅读 · 0 评论 -
虚拟机调优场景
大内存硬件上的程序部署策略集群间同步导致的内存溢出堆外内存导致的溢出错误(直接内存太小,NIO太多,注意关注直接内存,线程堆栈,Socket缓存区,JNI代码(本地库),虚拟机和垃圾收集器)外部命令导致系统缓慢(Shell脚本与Java API)服务器虚拟机进程崩溃不恰当数据结构导致内存占用过大由windows虚拟内存导致的长时间停顿由安全点导致长时间停顿...原创 2021-12-29 15:51:13 · 492 阅读 · 0 评论 -
虚拟机性能监控,故障处理工具
JDK开发团队选择Java语言来直线这些故障处理工具是有原因的:当应用程序部署到生产环境后,无论是人工物理接触到服务器还是远程Telnet到服务器上都可能会受限制。而使用这些工具类库里面的接口和实现代码,开发者可以选择直接在应用程序中提供功能强大的监控分析功能。基础工具jps (windows命令行直接输入jps)jstat -gc 2764 250 20 (每250毫秒查询一次进程2764垃圾收集情况,共查询20次)jinfo -flag CMSInitiatingOccupancyF原创 2021-12-28 18:43:50 · 281 阅读 · 0 评论 -
实战:内存分配与回收策略
1对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8表示Java堆20MB,10MB新生代,10MB老年代,新生代中一个Eden与一个Survivor大小比8:1代码:public class JvmTest { private stati原创 2021-12-23 15:58:14 · 192 阅读 · 0 评论 -
虚拟机以及垃圾收集器日志
在JDK9之前HotSpot并没有提供统一的日志处理框架。JDK9之后,所有功能的日志都收归到了-Xlog参数上,垃圾收集器的标签名为“gc”。 JDK9之前 JDK9之后 查看GC基本信息 -XX:+PrintGC -Xlog:gc 查看GC详细信息 -XX:+PrintGCDetails -X-log:gc* 查看GC前后的堆,方法区可用容量变化 -XX:+PrintHeapAtGC -Xlog:gc+heap=debug 查看原创 2021-12-23 13:41:38 · 390 阅读 · 0 评论 -
HotSpot算法实现细节
原创 2021-12-19 16:48:53 · 137 阅读 · 0 评论 -
Jvm内存溢出
堆内存溢出eclipse设置-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8run configuration设置-verbose:gc -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError代码如下:public class JvmTest { static class OOMObject{ } publ...原创 2021-12-14 00:01:23 · 1400 阅读 · 0 评论 -
centos编译jdk
首先安装gcc,freetype,CUPS,X11,ALSA,libffi,Autoconf部分命令:yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-develyum install cups-develyum install fontconfig-develyum install alsa-lib-devel要编译的是jdk12,需要jdk11的环境,首先要把系统自带的jdk8原创 2021-12-13 00:11:47 · 129 阅读 · 0 评论