java技术圈 为您找到相关结果 32

java.lang.OutOfMemoryError:GC overhead limit exceeded

前言 在我们写的java service里,需要加载一个比较大的算法模型pmml文件.在此模型文件由500M+变为1G+的时候,在测试环境中出现了此问题 异常由来 GC overhead limt exceed检查是Hotspot VM 1.6定义的一个策略,通过统计GC时间来预测是否要OOM了,提前抛出异常,防止OOM发生。Sun 官方对此的定义是:“并行/并发回收器在GC回收时间过长时会抛出OutOfMemroyError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存。用来避免内存过小造成应用不能正常工作。 代码中使用静态对象的方式用来在多线程中共享此文件模型,由于加载文件过大,并且长时间的GC回收了不到2%的内存,于是抛出了这个异常 这个异常的作用: > 在应用o...阅读全文

博文 2019-04-03 14:31:02 www.allocmem.com

golang中new和make简析

引言: 目前简单梳理了golang的知识点,进行查漏补缺,这里简要记录下golang中的make和new,由于个人能力有限,如有错误,欢迎指正。 正文: 1. make 分配了一个有初始值(非零)的T类型(我这里打印的为空,个人理解为空值)返回值 当slice cap无法满足需要,则在初始大小cap(即第三个参数,这里为6),成倍增长 2. new 分配了零值填充的T类型的内存空间,并返回其地址(指针) 当slice cap无法满足需要,则以16为基数,成倍增长 测试代码如下: “` package main import "fmt" //make 分配了一个有初始值(非零)的T类型(我这里打印的为空,个人理解为空值)返回值 当slice cap无法满足需要,则在初始大小cap(即第三个参数...阅读全文

博文 2019-04-04 09:53:58 www.allocmem.com

浅析字节存储序列的大小端存储方式

基础 内存地址是从低地址开始进行编号的,用16进制来进行编号,比如内存的开始地址(即低地址)0x0000,然后内存偏移以字节为单位,比如0x0001表示从0x0000位置偏移到后面1个字节,即偏移8bit.字节的高低位是俗成约定的,比如字节序列0x12345678,由于一个16进制的转为2进制占四个2进制(2^4=16,进制转换基础),那么0x12则可以转为8个二进制,也就是8bit=1byte,也就是1字节,回到字节的高低位的俗成约定,0x12为最高位,0x78为字节序列的最低位置 什么是大端和小端 Big-Endian和Little-Endian的定义如下: 1. Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2. Big-Endian就是高...阅读全文

博文 2019-04-03 14:30:28 www.allocmem.com

java和golang中的unsafe包

首先聊聊反射 java和golang都有各自的反射机制,为什么标准库会提供反射机制呢? 反射(reflection)允许程序在运行时(runtime)检查、修改程序(比如对象,struct等)的结构与行为,跳过编译检查,越过访问权限,运行时对象生成,方法调用等。如果没有反射,那么需要完全手动进行硬编码,比如如果没有反射,那么在spring的ioc容器管理实现就需要我们使用new来创建对象,那么也就不叫spring ioc,不会有spring ioc的诞生了。 静态编译(多数静态语言):在编译时确定类型,绑定对象。 动态编译(多数动态语言):运行时确定类型,绑定对象。可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分明显)。通过反射机制我们可以获得类...阅读全文

博文 2019-04-03 14:27:58 www.allocmem.com

java和golang中的unsafe包

### 首先聊聊反射 java和golang都有各自的反射机制,为什么标准库会提供反射机制呢? 反射(reflection)允许程序在运行时(runtime)检查、修改程序(比如对象,struct等)的结构与行为,跳过编译检查,越过访问权限,运行时对象生成,方法调用等。如果没有反射,那么需要完全手动进行硬编码,比如如果没有反射,那么在spring的ioc容器管理实现就需要我们使用new来创建对象,那么也就不叫spring ioc,不会有spring ioc的诞生了。 静态编译(多数静态语言):在编译时确定类型,绑定对象。 动态编译(多数动态语言):运行时确定类型,绑定对象。可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分...阅读全文

理解 Linux 的虚拟内存

前言 前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑)。 我之前了解一些操作系统的概念,主要是毕业后对自己大学四年的荒废比较懊恼,觉得自己有些对不起计算机专业出身,于是在工作之余抽出时间看了哈工大在网易云课堂的操作系统公开课,自己也读了一本讲操作系统比较浅的书 《Linux内核设计与实现》,而且去年自己用 C 写简单的服务器时,也追根究底了解了更多的系统底层知识。多亏了这些知识,让我对应用层的知识更有掌控感,也在上次排查问题时(从应用到内核查接口超时)助了我一臂之力。 前几天另一位同事来问另一个虚拟内存相关的问题,我才发现对于虚拟内存,我的理解还不够深刻,...阅读全文

博文 2019-06-20 08:48:00 枕边书

操作系统管理内存的机制——为什么要设置虚拟内存? - wj_hubei

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。 一 早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存的呢?下面通过实例来说明当时的内存分配方法: 某台计算机总的内存大小是128M,现在同时运行两个程序A和B,A需占用内存10M,B需占用内存110。计算机在给程序分配内存时会采取这样的方法:先将内存中的前10M分配给程序A,接着再从内存中剩余的118M中划分出110M分配给程...阅读全文

Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?

因为当时 Java 选择的是 UCS-2,是一个定长的编码,在当时以单个码元能表示所有字符,以下标获取字符的开销基本等同于在数组中索引一个字符,用起来是最方便的,多占用的内存大小也是可以接受的。到了后来 UCS-2 无法表示所有 Unicode 字符的时候,过渡到了兼容它的 UTF-16 上也是最自然以及迁移成本最低的选择,这很好理解。至于 UTF-16 浪费内存的问题,在 JEP 254 Compact Strings 中优化了这个问题,Java 9 已经实现了这个 JEP。翻翻源码就能看到,现在 String 内部是存储了一个 byte[],以及对应的编码标记,而不再是 char[] :public final class String { ... private final byte[...阅读全文

linux是怎样分配内存的

我们常说的内存容量,比方说我的笔记本电脑内存就是8GB,其实指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。 linux内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的,这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个CPU指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。比如最常见的32位和64位系统。如下所示: 32位系统的内核空间占用1G,位于最高处,剩下的3G是用户空间。而64位系统的内核空间和用户空间都是128T,分别占据整个内存空间的最高和最低处,没剩下的中间部分是未定义的。 进程在用户态时...阅读全文

操作系统内存管理_黄规速, 逆水行舟,不进则退。

1、 计算机的存储体系 内存是计算机很重要的一个资源,因为程序只有被加载到内存中才可以运行;此外,CPU所需要的指令与数据也都是来自内存的。可以说,内存是影响计算机性能的一个很重要的因素。 在介绍内存管理的细节前,先要了解一下分层存储器体系: 大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。这些资源的合理使用与否直接关系着系统的效率。 CPU缓存(Cache Memory):是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内...阅读全文

byte 为什么要 & 0xff?_iblade的博客

在MD5运算中 通常会把MD5(十六进制的byte[])转成HexString, 会用到一个方法 private static String bytesToHex1(byte[] md5Array) { StringBuilder strBuilder = new StringBuilder(); for (int i = 0; i < md5Array.length; i++) { int temp = 0xff & md5Array[i];//TODO:此处为什么添加 0xff & ? String hexString = Integer.toHexString(temp); if (hexString.length() == 1) {//如果是十六进制的0f,默认只显示f,此时要补上0...阅读全文

博文 2021-09-16 12:35:04 CSDN博客

ThreadLocalMap里Entry为何声明为WeakReference? - waterystone

Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象。Map的Entry里,key为ThreadLocal对象,value即为私有对象T。在spring MVC中,常用ThreadLocal保存当前登陆用户信息,这样线程在任意地方都可以取到用户信息了。 public class UserContext { private static final ThreadLocal userInfoLocal = new ThreadLocal(); public static UserInfo getUserInfo() { return userInfoLocal.get(); } public static void setUs...阅读全文

博文 2021-04-27 05:58:59 博客园

free命令中的buffer和cached的比较

free命令中的buffer和cached的比较最近在搞监控,突然看到我系统的内存要用完了,赶紧登录服务器看看,~]# dstat -m 16G内存就剩1G了。怎么回事,然后用free命令看了下~]# free -m 原来是cached占用较多,真正用的只有6773M,空闲是9307M。但是还是对cached占用这么多比较担心,所以就查了下,下面文章转载至http://blog.csdn.net/beacherlu/article/details/45871489经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是linux内存管理的一个优秀特性,在这方面,区别于Windows的内...阅读全文

Java JVM 参数设置大全

首页 > 基础教程 > 基础知识 > JDK&JRE&JVM Java JVM 参数设置大全 JVM参数设置说明 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn 年轻代大小(1.4or lator) 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代...阅读全文

博文 2020-07-28 06:53:23 www.51gjie.com

深入剖析Linux IO原理和几种零拷贝机制的实现

前言零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术和内存区域映射技术。零拷贝机制可以减少数据在内核缓冲区和用户进程缓冲区之间反复的 I/O 拷贝操作。零拷贝机制可以减少用户进程地址空间和内核地址空间之间因为上下文切换而带来的 CPU 开销。正文1. 物理内存和虚拟内存由于操作系统的进程与进程之间是共享 CPU 和内存资源的,因此需要一套完善的内存管理机制防止进程之间内存泄漏的问题。为了更...阅读全文

博文 2021-08-17 04:10:56 知乎

CSP和Actor两种并发模型分析 - _Eternity味道

背景 在多核CPU机器下,为了充分利用多核计算机的资源,我们需要进行并发编程,提高对CPU的利用率, # 提示:如你已了解或无意了解并行和并发,可以跳过本段,直达标题 ”传统并发和基于消息传递的并发“ 并行(parallel): 物理上同一时间处理不同任务 并发(concurrent): 逻辑上处理同时的任务的能力 通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。 在单核处理器上,通过多线程共享CPU时间片串行执行(并发非并行)。 而并行则依赖于多核处理器等物理资源,让多个任务可以实现并行执行(并发且并行)。 如下是一些编程语言,以及它们相应的并发机制: Actors Model — Erlang, Scala, Rust CSP — Go-lang 多...阅读全文

博文 2022-11-13 08:00:25 博客园

云存储环境下的容灾关键技术

本文分享自天翼云开发者社区《云存储环境下的容灾关键技术》,作者:王兆龙云存储的出现解决了现有容灾系统的几个显著问题:一是面对大量的备份数据,管理系统不够完善的问题;二是面对大规模的数据容灾灵活性和效率不高的问题;三是在数据加密保护方面依然存在的安全隐患问题。那么,云存储解决这些问题主要依靠的技术原理和机制是什么呢,云环境下的容灾关键技术都有哪些,本文接下来将对此进行简单的介绍和分析。映射技术映射技术是实现信息存储的核心技术。追踪映射技术十分关键,在通常情况下,云存储环境下的处理程序和管理设备程序之间会形成映射关系,这种管理能够直接的影响到容灾系统的应用。一是数据自动迁移,这种方法的应用是一种事件触发的,并且触发事件还包括了磁盘容量的扩展、缩小,磁盘的损坏、维修,磁盘的饱和、填充等一系列事件,...阅读全文

博文 2023-06-30 10:58:57 Tianyiyun

idea编译项目很慢

如果你正在使用 IntelliJ IDEA 编译 Java 项目,遇到编译速度缓慢的问题,以下是一些可能的原因和解决方法: 内存不足:检查你的电脑内存是否足够支持 IDEA 运行,并确保为 IDEA 分配了足够的内存。你可以编辑 IntelliJ IDEA 安装目录下的 bin 目录下的 idea64.exe.vmoptions 文件,将-Xms和-Xmx参数值增加一些。 插件过多:禁用不必要的插件,因为一些插件可能会导致 IDEA 编译速度变慢。 外部依赖库:检查你的项目是否引用了大量的外部依赖库,如果是,建议尝试减少依赖库的数量或者更换为较小的依赖库。 编译设置:检查你的编译设置是否正确。例如,你可以在“File” -> “Settings” -> “Build, Execution, ...阅读全文

关于Linux中的mmap和page cache的问题?

功能描述:mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。基 于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到 更新,首次对映射区的第一个页索引时会更新该字段的值。用PROT_WRITE 和 MAP_SHARED标志建立起来的文件映射,其st_ctime和 st_mtime在对映射区写入之后,但在msync()通过MS_SYNC 和 MS_ASYNC两个标志调用之前会被更新。用法: void *mmap(void *start, size_t length,...阅读全文

NUMA架构介绍及优缺点分析

本文分享自天翼云开发者社区《NUMA架构介绍及优缺点分析》,作者:郁****航什么是NUMA架构1、概念NUMA(Non-Uniform Memory Access,非统一内存访问)架构是一种针对多处理器系统的内存组织方式。在这种架构中,处理器被分配到不同的节点,每个节点拥有自己的本地内存。处理器可以访问本地内存和其他节点的内存,但访问本地内存的速度要快于访问其他节点的内存。 2、设计原理NUMA架构的设计原理主要是为了解决多处理器系统中的内存访问瓶颈问题。随着处理器数量的增加,内存带宽需求也会相应提高。然而,在传统的统一内存访问(UMA)架构中,所有处理器共享同一块内存,导致内存访问延迟增加、内存带宽成为系统性能的瓶颈。NUMA架构通过将内存分配到各个节点,使处理器优先访问本地内存,降低内...阅读全文

浅析进程分配内存的两种方式——brk()和mmap()

如何查看进程发生缺页中断的次数?用ps -o majflt,minflt -C program命令查看。majflt代表major fault,中文名-叫大错误,minflt代表minor fault,中文名叫小错误。这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1、检查要访问的虚拟地址是否合法 2、查找/分配一个物理页 3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干) 4、建立映射关系(虚拟地址到物理地址) 重新执行发生缺页中断的那条指令 如果第3步,需要读取磁盘,那么这次缺页中断就是majflt,否则就是minflt。 内存分配的原理从操作系统角度来看,进程分配内存有两种方...阅读全文

【Java集合】数据结构与集合的神秘联系,一文读懂!

上篇文章中我们对单列集合中常用的方法和遍历查询。通过本文章为我们解惑,好好的字符串用起来不就行了,为什么要用集合这些工具类?本篇文章将简要介绍数据结构,让读者了解它们在计算机中以何种结构方式存在。那么,什么是数据结构呢?下面我们来详细解释。 ## 数据结构 ### 1.1 数据结构有什么用? 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 ![image.png](http://static.itsharecircle.com/231107/780768685050bf3238e22caee5c12252.png) 数据结构往往同高效的检索算法和索引技术有关。 这句话是啥意思...阅读全文

linux 创建 swap分区

linux 创建 swap分区 swap是什么?Swap:交换分区类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。当用户提交程序,然后产生进程,在机器上运行。机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出swap扮演了一个非常. 复制链...阅读全文

malloc中的系统调用brk和mmap - 一生热爱

malloc中的系统调用brk和mmap 环境 ubuntu14.04 malloc通过系统调用的方式从操作系统申请内存,malloc内部又通过系统调用brk()或mmap来申请内存的。入下图进程虚拟内存布局所示,mmap对应Memory Mapping Segment,brk对应Heap. brk brk通过增加program break的位置(brk)从内核申请(非零值初始化)内存。一开始堆段(heap segment)的其实位置(start_brk)和结束位置(brk)指向同一个位置。 当ASLR(Address Space Layout Randomization)关闭时,start_brk和brk同时指向data/bss段的结束位置(end_data) 当ASLR打开时,start...阅读全文

博文 2023-05-12 15:49:36 博客园

linux环境常用的性能监控和协助开发调试工具_s1mba的博客

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的命令。更多更详细的命令可以参考 https://github.com/brendangregg/perf-tools A 、CPU进程相关 常用工具列举下:uptime、ps、top、mpstat、pidstat等 uptime: 查看系统运行时间,平均负载等。 ps:可查看某个进程占用CPU资源百分比;查看线程信息 ps -eLf top/htop/atop:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示; top -Hp pid(主线程id) 可以看到多线程程序中所有线程的状态。 mpstat: 可以查...阅读全文

博文 2023-05-15 08:57:04 CSDN博客

云主机CPU和内存配比:优化资源分配的关键

本文分享自天翼云开发者社区《云主机CPU和内存配比:优化资源分配的关键》,作者:每日知识小分享随着云计算技术的快速发展,云主机已经成为了许多企业和个人用户首-选的计算解决方案。在部署和配置云主机时,CPU和内存的配比是一个非常重要的考虑因素。本文将深入探讨云主机CPU和内存配比的问题,以帮助用户更好地优化资源分配,提高云主机的性能和效率。一、云主机CPU和内存的重要性CPU和内存是云主机中最重要的两个资源。CPU负责处理数据和指令,是决定云主机计算能力的关键因素。而内存则负责存储数据和程序,是影响云主机响应速度和并发处理能力的核心因素。对于大多数应用程序来说,CPU和内存的性能都会影响到其运行效果。因此,合理的CPU和内存配比能够提高云主机的整体性能,并确保应用程序的稳定运行。二、云主机CP...阅读全文

为什么重写equals必须重写hashCode-腾讯云开发者社区

equals常见面试题在开始聊之前,我们先看几个常见的面试题,看看你能不能都回答上来。1、equals和==有什么区别?2、hashcode相等的两个对象一定==相等吗?equals相等吗?3、两个对象用equals比较相等,那它们的hashcode相等吗?如果我们不重写equals和hashcode,那么它使用的是Object方法的实现。我们先简单看一下public boolean equals(Object obj) { return (this == obj); }复制public static int hashCode(Object o) { return o != null ? o.hashCode() : 0; }复制为什么要重写equals通过以上代码可以看出,Object提供...阅读全文

博文 2023-12-20 10:22:22 腾讯云

认识Redis:不只是缓存,还有这些厉害的功能!

在当今数据驱动的世界中,快速存取信息成为了技术发展的关键。而在众多存储解决方案中,Redis以其独特的魅力和强大的功能,成为了开发者们的宠儿。今天,就让我们一起来认识一下Redis。 ### 一、Redis是什么,可以用来干什么? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 ![image.png](http://static.itsharecircle.com/240220/c4b8adfc73b7950a6784418485d666f8.png) 与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速...阅读全文

博文 2024-02-20 16:18:32 YDYXCODE

linux使用MAT分析dump文件-腾讯云开发者社区

Widows 分析dump文件的工具太多了,而且都是傻瓜式的点点就好了。但是生产上分析dump文件的话,还是linux工具比较方便,因为生产上的dump文件一般都至少是GB级别的,这么大的文件拷贝到本机要耗费很长时间,特别是遇到生产事故的时候,时间=金钱。 更不允许我们把宝贵的拍错时间浪费到网络传输上面。 那么linux有什么好的解析dump工具呢? 如何解析 java dump的文件? 这里比较推荐IBM的eclipse的MAT工具。运行环境要求linux操作系统JDK8 以上下载MAT的linux版本Eclipse的MAT工具下载链接 MAT支持各种操作系统,找到Linux版本下载下来# 运行uname -m 看一下linux是 x86_64还是 x86的帮助你选择下载那个版本。 una...阅读全文

博文 2024-03-13 10:51:37 腾讯云