JVM垃圾回收算法解析标记-清除算法该算法为最基础的算法。它分为标记和清除两个阶段,首先标记出需要回收的对象,在标记结束后,统一回收。该算法存在两个问题:一是效率问题,标记和清除过程效率都不太高,二是空间问题,在执行一次清除操作后,会存在好多不连续的内存碎片,从而造成资源的浪费。空间碎片太多将会导致,当在程序运行过程中,需要分配较大对象的时候无法找到足够的连续内存将会导致下一次垃圾收集操作。复制算
分类:
编程语言 时间:
2019-01-08 10:55:22
阅读次数:
178
一、基础篇JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 ...
分类:
编程语言 时间:
2019-01-08 10:48:52
阅读次数:
254
描述一下问题背景,公司部分项目还在使用老三层框架,存在跨库join的情况,在服务化的改造过程中,这些跨库join的老三层从都要被换成对应的服务接口。 目前有个项目通过sql访问了C端产品组的三张表,并且时跨库join,对方开发组要回收表的访问权,所有sql访问的都要改成接口访问。 C端产品组提供的服 ...
分类:
其他好文 时间:
2019-01-08 00:20:57
阅读次数:
176
一、Java 线程池 Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(线程最大并发数不可控制);线程池为无限大,当执行第二个任务时若第一个任务已经完成,会 ...
分类:
编程语言 时间:
2019-01-07 17:28:52
阅读次数:
511
Java面试中,线程池也算是一个高频的问题,其实就JDK源码来看线程池这一块的实现代码应该算是写的清晰易懂的,通过这篇文章,我们就来盘点一下线程池的知识点。 本文基于JDK1.8源码进行分析 首先看下线程池构造函数: public ThreadPoolExecutor(int corePoolSiz ...
分类:
编程语言 时间:
2019-01-07 00:13:37
阅读次数:
205
原文:redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换一. 概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解。下面再了解类型检查,内存回收,对象共享,对象的空转时长。 1.1 类型检查与命令多态 ... ...
分类:
数据库 时间:
2019-01-06 23:03:50
阅读次数:
265
一.JVM内存管理 1.1JVM运行时数据区 1.1.1程序计数器:记录当前线程正在执行的字节码指定的地址(行号) 为什么需要它:程序容易被打断 1.1.2虚拟机栈:存储当前线程运行方法时所需要的数据、指令、返回地址 1.1.3本地方法栈:和虚拟机栈类似,存储的是native方法 1.1.4方法区: ...
分类:
编程语言 时间:
2019-01-06 15:36:48
阅读次数:
236
1、maxmemory-policy noeviction(默认):内存空间不足会报错 2、allkeys-lru:最少使用的数据去淘汰 3、allkeys-random:随机淘汰一些key 4、volatile-random:在已经设置了过期的时间去随机淘汰 volatile-lru:在已经设置了 ...
分类:
其他好文 时间:
2019-01-06 10:45:00
阅读次数:
149
首先JVM的内存结构包括五大区域: 程序计数器、虚拟机栈、本地方法栈、方法区、堆区。其中程序计数器、虚拟机栈和本地方法栈3个区域随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题。而Java堆区和方法区则不一样,这部分内存的分配和回收是动态的,正式垃圾回收需要关 ...
分类:
其他好文 时间:
2019-01-06 00:03:59
阅读次数:
200
Item5:消除过期对象的引用 JVM为我们实现了GC(垃圾回收)的功能,让我们从手工管理内存中解放了出来,这固然很好,但并不意味着我们就再也不需要去考虑内存管理的事情了;我们用简单的栈实现的例子来解释: 这段程序没有什么明显的错误,无论怎么测试,结果似乎都是正确的,但不严格的讲,这段程序存在"内存 ...
分类:
编程语言 时间:
2019-01-06 00:02:10
阅读次数:
195