浩浩 浩浩
4年前
JVM--指令重排序+volatile关键字
volatile关键字1、volatile翻译为不稳定的,容易改变的。意思很明确,如果使用volatile定义一个变量,意思就是可能该变量改变频繁,并且设计到多线程访问问题。2、不过现在jdk的synchronized关键字性能已经足够出色,也提供了多种Lock类,因此volatile关键字能实现的功能jdk的同步方法都能够实
kebukeyi kebukeyi
4年前
Jvm的内存布局和垃圾回收机制
内存布局运行时数据区1.程序计数器:用来控制代码运行行数。2.Java虚拟机栈:每个线程运行方法(A调用B)时,先把A方法放入到栈底,然后加载B方法,B
Stella981 Stella981
3年前
JVM调优实战:G1中的to
最近刚刚将自己的一个应用从CMS升级到G1,在一天早上,刚刚到办公室坐下,就收到手机一阵报警,去查看了监控,发现机器的内存出现了一个90度的涨幅,如下图所示:!image.png(https://oscimg.oschina.net/oscnet/ae6bebe36fe95ba28b8ee7c4ac673c52a81.png)在查看GC日志后,发
Stella981 Stella981
3年前
JVM 判断对象已死,实践验证GC回收
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/0ebff09c323c432a80ec04c08b22b0d4.png)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Stella981 Stella981
3年前
24个Jvm面试题总结及答案
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新
Wesley13 Wesley13
3年前
Uber 开源分布式追踪工具:JVM Profiler
《JVMProfiler:AnOpenSourceToolforTracingDistributedJVMApplicationsatScale》(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Feng.uber.com%2Fjvmprofiler)
Stella981 Stella981
3年前
JVM学习总结(六)内存分配与回收策略
_对象优先在新生代Eden区中分配_当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC,虚拟机提供了XX:PrintGCDetails这个收集器日志参数。MinorGC与FullGC比较:新生代GC(MinorGC)指发生在新生代的垃圾回收,Java对象大多具备朝生熄灭的特性,所以MinorGC非常频
Stella981 Stella981
3年前
JVM内存泄漏导致内存溢出(OOM)的场景
一、概念1\.内存泄漏:对象使用完之后,没有按照预期被GC回收,一直留在内存中2\.内存溢出:大量对象一直留在内存中,导致内存不够用(OOM),影响正常的程序运行二、内存泄漏的场景1\.内存中数据量太大,比如一次性从数据库中取出来太多数据2\.静态集合类中对对象的引用,在使用完后未清空(只把对象设为null,而不是从集合中移除),
Stella981 Stella981
3年前
JVM(7)之 从GC日志分析堆内存
在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存。   首先我们来了解几个相关的参数:
Wesley13 Wesley13
3年前
04 JVM是如何执行方法调用的(上)
重载和重写重载:同一个类中定义名字相同的方法,但是参数类型或者参数个数必须不同。重载的方法在编译过程中就可完成识别。具体到每一个方法的调用,Java编译器会根据所传入参数的生命类型来选取重载方法。选取的过程分以下三个阶段:1:在不考虑对基本类型自动装拆箱,以及可变长参数的情况下选取重载方法。2:如果第1个阶段未找到,那么在允许自动