线程池概念 简单理解,它就是一个管理线程的池子。 它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。 提高响应速度。 如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执 ...
分类:
编程语言 时间:
2019-12-23 15:10:25
阅读次数:
82
垃圾回收算法 1.标记清除 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。 在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。 适用场合: 存活对象较多的情况下比较高效 适用于年老代( ...
分类:
编程语言 时间:
2019-12-23 00:31:31
阅读次数:
83
JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。 2.导致Full GC的原因 ...
分类:
编程语言 时间:
2019-12-23 00:16:17
阅读次数:
239
JVM部分数据整理 一、运行时数据区域 Java内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【Java堆、方法区】、直接内存(不受JVM GC管理) 1、线程私有部分 1.1、程序计数器 程序计数器(Program Counter Register)一块较小的内存空 ...
分类:
其他好文 时间:
2019-12-21 22:46:38
阅读次数:
81
在《初步了解JVM第一篇》和《初步了解JVM第二篇》中,分别介绍了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中。其中类加载器的类型有如下:执行引擎:负责解释命令,提交给操作系统执行。 启动类加载器(Bootstrap) 扩展类加载器(Extension) 应用程序类加载器(Ap ...
分类:
编程语言 时间:
2019-12-21 20:19:18
阅读次数:
94
搜索词条 1、idea报java.lang.OutOfMemoryError: Java heap space怎么解决? 2、java.lang.OutOfMemoryError: GC overhead limit exceeded怎么解决? 3、xssfworkbook导出Excel内存溢出? ...
分类:
其他好文 时间:
2019-12-20 18:13:05
阅读次数:
94
GC回收算法 1.标记清除算法分为标记阶段和清除阶段标记阶段:通过特定的判断方式找出无用的对象实例并将其标记清除阶段:将已标记的对象所占用的内存回收缺点:运行多次以后容易产生空间碎片,当需要一整段连续内存时虽然空间足够但是无法分配,会多次触发GC操作。 2.复制算法为了提高标记清除算法的效率,减少内 ...
分类:
编程语言 时间:
2019-12-20 11:42:45
阅读次数:
67
1、内存模型 1.1、堆 1. 堆是所有线程共享的,主要存放对象实例和数组。 2. 新生代和老年代的比例是1:2。 3. 新生代中三个区域的比例是 8 : 1 : 1。 1.1.1、新生代 对象分配在eden区中,当eden区满时会触发minor gc,将eden区中存活的对象,复制到survivo ...
分类:
编程语言 时间:
2019-12-18 23:36:48
阅读次数:
95
Problem Statement Given an integer array of size n, find all elements that appear more than ? n/3 ? times. Note: The algorithm should run in linear ti ...
分类:
其他好文 时间:
2019-12-18 14:53:18
阅读次数:
76
垃圾收集分两大块内容: 新生代垃圾收集、老年代垃圾收集 两者各有特性,在新生代内存中,大部分对象朝生夕死,GC的垃圾回收算法大多为复制算法 老年代内存中对象的存活率较高,古选择标记-整理、标记-清除算法较多 新生代收集器有三款: Serial收集器、ParNew收集器、Parallel Scaven ...
分类:
其他好文 时间:
2019-12-18 14:47:21
阅读次数:
88