引用类型:强引用(new),虚引用,软引用,弱引用1.软引用(SoftReference)如果一个对象只具有软引用,而当前虚拟机堆栈内存足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。2.弱引用(WeakReference)与软引用的区别垃圾回收器一旦发现某块内存上只有弱引用,不管当前内存空间是否足够,那么都会回收这块内存。2.通过软引用/弱引用提升内存性能1)内存足够时,无需
分类:
其他好文 时间:
2020-03-04 17:32:12
阅读次数:
102
JVM的内存区域是怎么划分的?JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢?首先是程序计数器(ProgramCounterRegister),在JVM规范中,每个线程都有自己的程序计数器。这是一块比较小的内存空间,存储当前线程正在执行的Jav
分类:
其他好文 时间:
2020-03-04 00:24:06
阅读次数:
63
一、JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。 2.导致Full GC的原 ...
分类:
其他好文 时间:
2020-03-03 00:43:24
阅读次数:
65
常用工具及命令 jps jstat Top jstack jmap mat工具 top -Hp pid可以查看某个进程的线程信息 -H 显示线程信息,-p指定pid jps:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称及进程pid 如:jps -l pid Jstack命令 jstack是 ...
分类:
其他好文 时间:
2020-02-29 00:25:59
阅读次数:
94
在本文中,我们将分两部分介绍Java中的线程同步,以更好地理解Java的内存模型。介绍Java线程同步和并发是复杂应用程序各个设计阶段中讨论最多的主题。线程,同步技术有很多方面,它们可以在应用程序中实现高并发性。多年来,CPU(多核处理器,寄存器,高速缓存存储器和主内存(RAM))的发展已导致通常是开发人员往往忽略的某些领域-例如线程上下文,上下文切换,变量可见性,JVM内存型号与CPU内存型号。
分类:
编程语言 时间:
2020-02-26 17:08:12
阅读次数:
74
jvm 常量池 方法区 1. 用于存储 jvm 加载的类的信息、常量、静态变量、编译后的代码 2. jdk7 及以往版本,方法区基于永久代实现,理论上是堆的一部分 3. jdk8 取消了永久代,在本地内存中划分区域 元空间,不属于 JVM 内存,方法区位于元空间中 jdk8 jdk7 jdk6: 运 ...
分类:
其他好文 时间:
2020-02-26 14:04:48
阅读次数:
82
一 jvm 1.线程 2.jvm内存区域 a) 程序计数器 -私有区 b) 虚拟机栈 -私有区 c) 本地方法取 --私有区 d) 堆-线程共享-运行时数据区 e) 方法区-永久代 线程共享 3.jvm运行时内存 a) 新生代:Eden区/ServisionFrom/ServisionTo/ Min ...
分类:
编程语言 时间:
2020-02-21 14:56:54
阅读次数:
92
[toc] JVM的内存结构一般指Java的运行时数据区: 由方法区,堆区,虚拟机栈,程序计数器和本地方法栈组成。下面我们依次介绍这5部分。 1.程序计数器(Program Counter Register) 程序计数器:记录下一条要执行的JVM指令的执行地址,字节码解释器工作时就是通过改变程序计数 ...
分类:
其他好文 时间:
2020-02-19 17:34:45
阅读次数:
77
一、jvm是干什么的? 大家都知道java是跨平台语言,一次编译可以在不同操作系统上运行,怎么做到的呢,看下图: javac把写的源代码(java文件),编译成字节码(class文件),字节码部署到linux/windows/..上,被对应的jvm解释成机器码运行,jvm的工作就是这个。 大家都知道 ...
分类:
其他好文 时间:
2020-02-19 17:21:07
阅读次数:
65