![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解jvm笔记
文章平均质量分 94
靛蓝忆
这个作者很懒,什么都没留下…
展开
-
【深入理解JVM】垃圾收集器&内存分配策略
那么虚拟机要进行GC的时候,就不会管这些已经运行到安全区域的线程,当线程要脱离安全区域的时候,要自己检查系统是否已经完成了GC或者根节点枚举(这个跟GC的算法有关系),如果完成了就继续执行,如果未完成,它就必须等待收到可以安全离开安全区域的Safe Region的信号为止。简单解释一下,当线程1,线程2 是两个十分耗时的循环,并且根据HotSpot放置安全点的位置来说,上一段代码是典型的 counted loop(可数循环),也就是说每次循环回跳前是不会放置安全点的。所以这里就引入了安全点的概念。原创 2023-01-11 15:31:26 · 373 阅读 · 1 评论 -
【深入理解JVM】内存模型
局部变量表所需要的内存空间在编译期完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小(大小指的是变量槽的数量,一个变量槽32个比特、64个比特或者更多完全由具体的虚拟机实现)。在java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。不过局部变量表用的是索引,操作数栈是弹栈/压栈来访问。原创 2023-01-10 11:56:36 · 299 阅读 · 0 评论 -
Java内存模型和内存泄漏实战(一)
java虚拟机在执行java程序过程中会把它所管理的内存划分为不同的数据区域。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而简历和销毁。 上图的java运行时数据区,大体分为线程私有区和线程共享区线程私有区程序计数器:一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需...原创 2018-09-05 23:21:54 · 432 阅读 · 0 评论 -
垃圾收集算法和垃圾收集器(二)
对象已死吗引用计数算法 : 给对象添加一个引用计数器,每当有一个地方引用它就+1,当引用失效时-1,任何时候当引用计数为0就证明可以被回收了.客观来说,引用计数实现简单,判断效率很高,但是解决不了循环引用的问题 python\actionScript3等一些语言使用引用计数来管理内存,但是jvm没有使用引用计数,原因就是没办法解决循环引用的问题可达性分析算法 : 从一些列成为 ” gc...原创 2018-09-06 20:30:04 · 183 阅读 · 0 评论 -
jvm性能检测命令(三)
java的自动内存管理归结为:给对象分配内存和回收分配给对象的内存;下面我们来验证在使用Serial / Serial Old收集器下的内存分配和回收策略。对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,jvm发起一次Minor GC。 虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾回收...原创 2018-09-07 11:41:44 · 185 阅读 · 0 评论 -
类文件结构(四)
Class文件是一组以8位字节为基础单位的二进制流,各个数据项严格按照顺序紧凑地排列在Class文件中,中间没有任何分隔符,整个Class文件存储的内容几乎全是程序运行的必要数据,没有空隙存在。当遇到8位字节以上空间的数据项时,则按照高位在前的方式分割成若干个8位字节进行存储。 根据Java虚拟机规范,Class文件格式采用一种类似c语言结构体的伪结构来存储数据,这种伪结构中只有两种数...原创 2018-09-13 11:50:34 · 190 阅读 · 0 评论