jvm
Nuan_Feng
蓝桥杯国赛一等奖。唯有志存千里,方能风行天下。
展开
-
jvm八之内存模型与线程
这里写自定义目录标题主内存与工作内存内存间交互操作volatile指令重排可见性原子性场景Java与线程内核线程实现用户线程实现用户线程加轻量级进程混合实现Java线程调度 主内存与工作内存 1. 所有的变量都存储在主内存 2. 线程的工作内存中保存了被该线程使用的变量的主内存副本 3. 不同的线程之间也无法直接访问对方工作内存中的变 量,线程间变量值的传递均需要通过主内存来完成 4. 线程对变量的所有操作(读取、赋值等)都必须在工作内 存中进行,而不能直接读写主内存中的数据 与处理器,高速缓原创 2020-06-11 00:19:21 · 234 阅读 · 0 评论 -
jvm七之虚拟机字节码执行引擎
运行时栈帧结构 栈帧用于支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素 在活动线程中,只有位于栈顶的方法才是在运行的,只有位于栈顶的栈帧才是生效的,其被称为“当前栈帧” (Current Stack Frame),与这个栈帧所关联的方法被称为“当前方法”(Current Method)。 每一个方法从调用到执行完成的过程,对应一个栈帧在虚拟机里面从入栈到出栈的过程 局部变量表 一组变量值存储空间,用于存放方法参数和方法内部定义的局部原创 2020-06-09 11:35:42 · 136 阅读 · 0 评论 -
jvm六之虚拟机类加载机制
类加载时机 6种情况必须对类初始化(主动引用,其余引用为被动引用) 1:new/获取或赋值静态变量以及调用静态方法 2:反射 3:初始化一个类,父类如还没初始化,先初始化其父类 4:虚拟机启动时,用户指定要执行的main() 5:jdk7新特性,如果一个java.lang.invoke.MethodHandle实例最后的解 析结果为REF_getStatic、REF_putStatic、REF_invokeStatic、REF_newInvokeSpecial四种类原创 2020-06-07 19:08:20 · 192 阅读 · 0 评论 -
jvm五之Class结构
class文件格式 u+数字,本别代表对应数字字节的无符号数,可以用来描述数字,索引引用,数量值 整个class就是一个表,由多个无符号或其他表构成,以_info结尾 1-4字节:魔数,用来描述这个文件到底啥类型,是否是class,class的值为CAFEBABE, 5-8这4字节存class版本号,5/6位次版本号,7/8主版本号 使用工具 javap -verbose class文件名 常量 接着2字节表示常量池容量个数,容量从1开始,所以具体容量为值-1,保留0是为了不引用任何一个常量池项原创 2020-06-07 14:54:41 · 143 阅读 · 0 评论 -
jvm四之性能调优
这里写目录标题常见问题处理jvm调优编译时间和类加载时间优化调整垃圾收集频率设置垃圾收集器降低延迟 常见问题处理 64位JDK和32最大的不同就是64位可以使用大内存, 但因此造成如果出现问题排查,dump的文件过大,产生快照也无法分析 而且64位因为涉及到指针膨胀和数据类型对齐之内,造成无辜内存损失, 最重要的是性能比32位低 根据运行环境选择适当的位数JDK,以及针对吞吐和并发请求等条件选择垃圾回收器 使用nio时,因为使用的是系统内存,所以jvm运行时候,设置恰当的堆内存,以便保留适当的系统内存给ni原创 2020-06-05 12:09:11 · 145 阅读 · 0 评论 -
jvm三之虚拟机性能监控以及故障处理
文章目录命令行工具jps(JVM process Status Tool)jstat(JVM statistics Monitoring Tool)jinfojmapjhatOQLjstack可视化工具jconsole空循环活锁死锁jvisualvm插件下载生成堆快照保存以及导入分析CPU和内存BTrace动态日志跟踪代码清单 具体功能都在tools.jar中 命令行工具 jps(JVM process Status Tool) 虚拟机进程状况工具 列出正在运行的虚拟机进程, 显示虚拟机执行主原创 2020-06-05 10:24:07 · 394 阅读 · 0 评论 -
jvm二之垃圾回收与分配策略
文章目录4种对象引用机制强引用软引用弱引用虚引用垃圾回收算法引用计数算法根搜索算法标记二次在清除垃圾收集算法标记清除算法复制算法标记-整理算法分代收集算法垃圾收集器Serial收集器Serial Old收集器ParNew收集器Parallel Scavenge收集器(吞吐量优先收集器)Parallel Old收集器CMS收集器G1收集器回收方法区内存分配与回收策略例子设置大对象直接进入老年代长期存活对象进入老年代空间分配担保内存分配执行过程 每个栈分配多少内存,基本上在类结构确定的时,就已知了 所以栈,本地原创 2020-06-04 22:18:36 · 192 阅读 · 0 评论 -
jvm一之java内存
java内存模型 Java7之前,常量池是存放在方法区(永久代)中的。 Java7,将常量池是存放到了堆的老年代中。 Java8之后,取消了整个永久代区域,取而代之的是元空间。常量池依然存放在老年代中。 程序计数器 当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复…都依赖这个计数器完成 如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码字节码指令的地址 如果正在执行的是nat原创 2020-06-04 17:48:33 · 202 阅读 · 0 评论