jvm
文章平均质量分 75
峥嵘岁月1
这个作者很懒,什么都没留下…
展开
-
静态变量和实例变量的存放位置区别问题
昨天在lc平台做算法时,遇到了一个加不加static的问题,即静态变量和实例变量的问题。首先是正确代码及运行结果:上面代码运行击败100%,完全正确,但是将红色部分添加上static修饰之后,会出现以下问题:运行结果在第一个样例即 n = 1 时就报错,且结果中还叠加了 n = 3 的结果,实在是对以下2个问题不解:为什么在第一个样例中会出现了n = 3的运行结果?如果错误,应该也是能通过第一个样例。为什么将brackets修饰成static后,就会出现以上的问题?后台代码的逻辑是什么?在经原创 2021-07-31 15:45:45 · 194 阅读 · 0 评论 -
JVM体系-线程安全和锁优化
线程安全线程安全的定义:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。线程安全的代码必备的特征:代码本身封装了所有必要的正确性保障手段,令调用者无须关心多线程下的调用问题,更无 须自己实现任何措施来保证多线程环境下的正确调用。线程安全在Java中的体现:1. 不可变。:只要 一个不可变的对象被正确地构建出来(即没有发生this原创 2021-05-30 14:24:23 · 104 阅读 · 0 评论 -
JVM体系-JVM内存模型与线程
为什么要进行多任务处理?1. 计算机运算能力强大。2. 计算机的运算速度与它的存储和通信子系统的速度差距太大,大量时间花在磁盘I/O、网络通信或者数据库访问上,必须要激发计算机的运算能力,减少造成性能浪费。高速缓存为什么要使用告诉缓存?:计算机的存储设备和处理器的运算速度差距太大,导致计算机需要添加高速缓存来进行一个缓冲。高速缓存的作用:读写速度接近处理器的运算速度,能够将运算所需要的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存中,这样处理器就无需等待缓慢的内存读写..原创 2021-05-30 11:26:18 · 109 阅读 · 0 评论 -
JVM体系-字节码执行引擎
运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息,每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在活动线程中,只有位于栈顶的方法才是在运行的,只有位于栈顶的栈帧才是生效的。局部变量表作用:局部变量表用于存放方法参数和方法内部定义 的局部变量。局部变量表的容量以变量槽为最小单位,都可以使用32位或更小的物理内存来存储boolean、 byte、char、short、in原创 2021-05-20 22:35:38 · 78 阅读 · 0 评论 -
JVM体系-类加载
类加载类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java类型的过程类加载的时机:加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,必须按这个顺序来,而解析阶段不一定,可以在初始化之后开始。以下6中情况需要立刻初始化:1.使用new关键字实例化对象的时候、读取或设置一个类型的静态字段、调用一个类型的静态方法的时候, 即遇到new、getstatic、putstatic或invokestatic这四条字原创 2021-05-20 21:16:04 · 78 阅读 · 0 评论 -
JVM体系-垃圾回收和内存分配
什么是垃圾?:Java内存中已经不再被使用的内存空间怎么判断对象是否存活? 引用计数法。在对象中添加一个引用计数器,有一个地方引用它时,计数器值就加一; 当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的。但是无法解决**相互循环引用**的问题。 可达性分析。从GCRoot出发,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain), 如果某个对象到GC Roots间没有任何引用链相连,即GC Roots到这个对象不可达时,则原创 2021-05-20 15:33:52 · 123 阅读 · 0 评论 -
JVM体系-性能调优
因为第三章是《深入理解JVM》,《深入理解Java虚拟机》中对这部分的阐述更完整,所以在另一篇博客上对这部分进行梳理。本博客主要对各种性能调优参数进行记录。堆大小设置:-Xms:设置堆的最小可用内存、-Xmx:设置堆的最大可用内存、 -Xmn:设置新生代的大小、-Xss:设置每个线程的堆栈大小、-XX:NewRatio:设置年轻代(包括Eden和两个Survivor区)与年老代的比值-XX:survivorRatio:设置新生代中Eden区和两个survivor区的比值。-XX:survivorRa原创 2021-05-19 18:31:52 · 187 阅读 · 0 评论 -
JVM体系-故障处理工具
基础故障处理工具jps:虚拟机进程状况工具,可以列出虚拟机正在运行的进程,虚拟机执行主类名称和进程本地虚拟机ID。jstat:监视虚拟机各种运行状态信息的命令行工具jinfo:Java配置信息工具,实时查看和调整虚拟机各项参数jmap:Java内存映像工具,用于生成堆转储快照jhat:虚拟机堆转储快照分析工具,与jmap搭配使用分析生成的堆转储快照jstack:Java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成目的:定位线程原创 2021-05-18 16:39:59 · 72 阅读 · 0 评论 -
JVM体系-内存管理
运行时数据区程序计数器程序计数器是一块较小的内存区域,且不会出现OOM (存放的仅仅是下一条待执行的命令的地址,最坏只能是死循环,不会出现oom)。作用:1. 帮助字节码解释器来读取下一条需要执行的字节码指令。2.记录当前线程的执行位置,方便下一次执行时恢复到正确的执行位置。Java虚拟机中多线程是通过线程轮流切换,分配处理器执行时间的方式(分配时间片轮转执行)。Java虚拟机栈Java虚拟机栈为线程私有。他的生命周期跟线程相同。描述的是Java方法执行的线程内存模型:每个方法被执行的时原创 2021-05-12 20:24:02 · 86 阅读 · 0 评论