
jvm
文章平均质量分 64
jvm
像你这样的
hctrl
展开
-
从字节码角度分析i++与++i的区别
可以看到 i++时, 先把i值10从局部变量表拿到操作数栈(29), 之后执行iinc, 直接修改局部变量表里面的值10修改成11(30), 最后将操作树栈里面的值赋值给i4(33) (由于iinc直接修改的局部变量表里面的值, 此时操作数栈还是10, 所以将10赋值给i4)++i时的情况也是相同, iinc(52)修改了局部变量表里面的值, 但是在(55)又重新load一次, 相当于把局部变量表增加1之后的值加载到操作数栈, 最后将这个值加载给i6。当i++与++i没有对象接收值时, 没有任何区别。原创 2024-01-12 15:33:18 · 529 阅读 · 0 评论 -
java多线程为什么每个线程都有一个单独的栈 ?
线程栈原创 2022-08-03 12:05:42 · 1298 阅读 · 0 评论 -
jvm dump 浅堆与深堆理解
原创 2021-06-16 22:40:24 · 174 阅读 · 0 评论 -
jvm 命令行监控工具
1原创 2021-06-10 16:27:27 · 162 阅读 · 0 评论 -
jvm 类加载器
类加载器是JVM执行类加载机制的前提q : 类加载器的主要作用是什么 ?原创 2021-06-02 23:01:38 · 191 阅读 · 2 评论 -
jvm 类的加载过程详解
1. 加载阶段① 加载完成的操作所谓加载, 简而言之就是将java类的字节码文件加载到集器内存中, 并在内存中构建出java类的原型-----类模板对象, 里面存储常量池, 类字段, 类方法等信息反射的机制即基于这一基础, 如果jvm没有将java类的生命信息存储起来, 则jvm在运行期也无法反射加载阶段, 简言之, 查找并加载类的二进制文件, 生成class实例, 这个实例指向方法区的类模型, 执行其他操作在加载类时, java虚拟机必须完成一下三件事通过类的全名, 获取类的二.原创 2021-05-27 20:05:22 · 394 阅读 · 1 评论 -
jvm class文件操作码
出栈/装入局部变量表指令类型 常数指令 范围 int(boolean,byte,char,short) iconst [-1,5] bipush [-128,127] sipush [-32768,32767] ldc any int value long lconst 0,1 ldc any long value float fconst 0,1,2 ...原创 2021-05-25 22:56:50 · 181 阅读 · 0 评论 -
jvm class文件总体结构
class文件整体解读javap 常用指令原创 2021-05-21 17:24:01 · 94 阅读 · 0 评论 -
jvm GC垃圾收集器
1. 评价GC垃圾收集器的标准吞吐量 (用户线程执行时间/ (用户线程执行时间 + 垃圾回收线程执行时间 )) 暂停时间2. 垃圾回收器历史原创 2021-05-13 00:22:08 · 159 阅读 · 0 评论 -
jvm GC相关概念
1. System.gc()① 会显示触发Full GC② 无法保证垃圾收集器的及时调用 ( 代码执行之后, 没有进行垃圾回收 )原创 2021-05-10 22:50:54 · 157 阅读 · 0 评论 -
jvm GC标记算法
1. 引用计数器算法2. 可达性分析算法① 如何查看有哪些GC ROOTS节点运行程序,并将程序阻塞, 通过jdk自带的visual VM 生成dump文件, 使用MAT查看有哪些gc roots节点② GC ROOTS节点如何溯源? (查看gc 链)通过jprofiler软件运行程序, 选择live memory...原创 2021-05-08 11:33:55 · 304 阅读 · 0 评论 -
jvm stringTable
public class Demo1 { public static void main(String[] args) { String s = new String("111"); s.intern(); String s1 = "111"; System.out.println(s == s1); //jdk6 : false jdk7/8 : false }}字节码文件 :1-5 : 创建一个string对象, 并把这个string对象的值存储到..原创 2021-05-06 11:39:28 · 87 阅读 · 0 评论 -
jvm 执行引擎
jvm翻译字节码文件主要有两种形式 : 解释器模式, 编译器模式, 混合模式1. 解释器模式一条一条的读取class文件, 解释并且执行字节码指令, 因为他一条一条的解释和执行指令, 所以它可以很快的解释字节码, 但是执行起来比较缓慢2. JIT 编译器模式JIT编译器把整段字节码不加筛选的编译成机器码, 不论其执行频率是否有编译的价值, 在程序响应时间的限制下, 没有达到最大的优化3. 混合模式程序刚开始启动的时候, 因为解释器可以很快的解释字节码, 所以首先发挥作用,.原创 2021-04-28 17:51:05 · 88 阅读 · 0 评论 -
jvm 对象的创建
1. 创建对象的六个步骤 a. 判断对象对应的类是否加载,链接, 初始化虚拟机遇到一个new指令, 首先去检查这个指令的参数是否能在metaspace的常量池中定位到一个类的符号引用, 并且检查这个符号引用代表的类是否已经被加载, 连接 ,初始化,(即判断类元信息是否存在), 如果没有, 那么再双亲委派模型下, 使用当前类加载器以ClassLoader + 包名 + 类名为key进行查找对应的class文件, 如果没有找到文件, 则抛出ClassNotFoundException异...原创 2021-04-25 10:37:41 · 193 阅读 · 0 评论 -
jvm类的加载, 连接, 初始化
一 类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中, 将其放在运行时数据区的方法区内, 然后在堆区创建一个java.lang.Class对象, 用来封装类在方法区内的数据结构类加载的最终产物是位于堆区中的class对象, Class对象封装了类在方法区内的数据结构, 并向java程序员提供了访问方法区的数据结构的接口 通过类名.class来获取类的类型引用( new 类名().getClass() )------> 反射 采用双亲委派模型来加载类二 连接.原创 2021-04-20 15:45:54 · 199 阅读 · 0 评论 -
jvm堆空间
1. 堆空间配置参数-Xms600m -Xmx600m : 配置堆初始化空间为600M, 堆最大空间为600m-XX:NewRatio=4 : 设置新生代与老年代的比例1:4, 默认值为2-XX:SurvivorRatio=2 : 设置survivor与eden的比例 1:1:2 默认值 1:1:8(实际上是1:1:6) ----> 使用 -XX:SurvivorRatio=8 显示指定-Xmn 设置新生代的空间大小...原创 2021-04-15 23:56:50 · 277 阅读 · 0 评论 -
java内存模型
原文地址:https://www.jianshu.com/p/15106e9c4bf3java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统...转载 2019-11-26 11:21:43 · 134 阅读 · 0 评论