前言:JVM中除了程序计数器,其他的区域都有可能会发生内存溢出。 0.什么是内存溢出 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出。 1.内存泄漏和内存溢出区别与联系 内存泄漏:系统分配的内存没有被回收。 内存溢出:分配的内存空间超过系统 ...
分类:
其他好文 时间:
2019-08-11 17:04:47
阅读次数:
104
Guava Cache 是做什么的? 内存缓存,类似于 ConcurrentMap,支持自动缓存、缓存回收和缓存移除回调。 两种加载方式 使用CacheLoader 当有默认的加载或计算方式使用该方式。示例如下: 使用 Callable 当没有默认加载运算,或者想要覆盖默认的加载运算,同时保留 “获 ...
分类:
系统相关 时间:
2019-08-11 12:48:05
阅读次数:
95
对于一个软件系统中的某些类而言,只有一个实例是很重要的。单例模式(Singleton)是结构最简单的设计模式,它的核心结构中只包含一个被称为单例类的特殊类。单例模式是一种对象创建型模式。实现单例模式有3个要点: 单例模式(Singleton)定义:确保一个类只有一个实例,并提供一个全局访问点来访问这 ...
分类:
编程语言 时间:
2019-08-11 12:47:48
阅读次数:
100
JVM总结(2)java内存区域、字节码执行引擎 1、内存区域 程序计数器:知道线程执行位置,保证线程切换后能恢复到正确的执行位置。 虚拟机栈:存栈帧。栈帧里存局部变量表、操作栈、动态连接、方法返回地址。局部变量表又存了各种基本数据类型和对象引用(句柄)。 本地方法栈:为Native方法服务 堆:存 ...
分类:
其他好文 时间:
2019-08-11 10:57:00
阅读次数:
98
JVM 概述:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚 ...
分类:
其他好文 时间:
2019-08-11 00:31:48
阅读次数:
63
SGI STL内存管理 在SGI STL版本的内存管理中,使用这样一种方式来分配内存:内存分配+对象初始化。首先是分配内存,其次是根据对象的类型(是否为POD【Plain of Data】)来使用最有效的方式来初始化对象。回收内存也是用同样的方式:析构对象+回收内存,根据对象是否为POD类型,确定最 ...
分类:
其他好文 时间:
2019-08-10 18:59:17
阅读次数:
127
高级特性 70.函数装饰器有什么作用?请列举说明?71.Python 垃圾回收机制?72.魔法函数 __call__怎么使用?73.如何判断一个对象是函数还是方法?74.@classmethod 和@staticmethod 用法和区别75.Python 中的接口如何实现?76.Python 中的反 ...
分类:
编程语言 时间:
2019-08-10 17:42:45
阅读次数:
75
由于c++没有垃圾回收机制,像堆只能手动开辟内存,手动释放,像栈只能系统开辟,系统释放,于是智能指针出现了,它实现了内存的手动开辟,系统释放,防止了内存泄漏问题; 我们知道, 栈对象在离开其作用域的时候, 会自动调用析构函数, 所以, 可以考虑把某一栈对象与某一堆内存绑定,且在其析构函数中释放堆内存 ...
分类:
其他好文 时间:
2019-08-10 13:44:19
阅读次数:
76
多道技术 1.空间上的复用: 多个程序共用一套计算机硬件 2.时间上的复用: 切换+保存状态 1.当一个程序遇到IO操作,操作系统会剥夺该程序的cpu执行权限(提高了cpu的利用率 并且也不影响程序的执行效率) 2.当一个程序长时间占用cpu 操作系统也会剥夺该程序的cpu执行权限(降低了程序的执行 ...
分类:
系统相关 时间:
2019-08-09 21:43:51
阅读次数:
127
前言: 由于最近写的程序在运行一段时间后出现高cpu,然后不可用故进而进行排查,最终定位到由于metaspace引起fullgc,不断的fullgc又占用大量cpu导致程序最终不可用。下面就是这次过程的分析排查和总结,便于以后温故,同时也希望能给遇到同样问题的同学一些参考。 一 jvm的内存分配情况 ...
分类:
Web程序 时间:
2019-08-09 17:38:15
阅读次数:
118