Stella981 Stella981
4年前
Android Native 内存泄漏系统化解决方案
导读:C内存泄漏问题的分析、定位一直是Android平台上困扰开发人员的难题。因为地图渲染、导航等核心功能对性能要求很高,高德地图APP中存在大量的C代码。解决这个问题对于产品质量尤为重要和关键,高德技术团队在实践中形成了一套自己的解决方案。分析和定位内存泄漏问题的核心在于分配函数的统计和栈回溯。如果只知道内存分配点不知道调用栈会
Wesley13 Wesley13
4年前
ETH 4G DAG问题及其对策
众所周知,对于只有4Gb显存的显卡来说,ETH的DAG尺寸已经非常大了,快要大到放不进只有4Gb显存的显卡了。另外,windows10操作系统还要从4Gb的显存中拿走0.5Gb显存,加剧了4Gb显卡显存的紧张态势。但这并不表明4Gb显存的显卡现在就挖不了ETH了,因为当显卡的显存不足够容下ETH的DAG文件时内核会使用系统内存(内存条的内存)。由于显卡
Wesley13 Wesley13
4年前
DLL 函数中使用结构体指针作函数参数(C# 调用 C++ 的 DLL)
存在的问题:问题1:C与C同样定义的结构体在内存布局上有时并不一致;问题2:C中引入了垃圾自动回收机制,其垃圾回收器可能会重新定位指针所指向的结构体变量。解决方案:问题1方案:强制指定C、C结构体的内存布局,使其一致(两者都固定为:结构体的成员按其声明时出现的顺序依次布局,结构体成员的内存对齐为1字节对齐);为题
Wesley13 Wesley13
4年前
JDK核心JAVA源码解析(4)
想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。本篇文章针对堆外内存与DirectBuffer进行深入分析,了解Java对于堆外内存处理的机制,为下一篇文件IO做好准备Java堆栈内存与堆外内
Wesley13 Wesley13
4年前
Java并发系列(6)Semaphore源码分析
Semaphore(信号量)是JUC包中比较常用到的一个类,它是AQS共享模式的一个应用,可以允许多个线程同时对共享资源进行操作,并且可以有效的控制并发数,利用它可以很好的实现流量控制。Semaphore提供了一个许可证的概念,可以把这个许可证看作公共汽车车票,只有成功获取车票的人才能够上车,并且车票是有一定数量的,不可能毫无限制的发下去,这样就会导致公
Wesley13 Wesley13
4年前
Java 虚拟机垃圾收集机制详解
本文摘自深入理解Java虚拟机第三版垃圾收集发生的区域之前我们介绍过Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程共存亡。栈中的每一个栈帧分配多少内存基本上在类结构确定下来时就已知,因此这几个区域的内存分配和回收都具有确定性,不需要考虑如何回收的问题,当方法结束或线程结
Stella981 Stella981
4年前
HP Gen8 + Epson L211 + Ubuntu 搭建内部服务器
周末出差回来,洋洋跟我说,共享的服务器挂掉了。之前是用的联想的一台小机器在内部共享的服务器,装得是xp,接的是EpsonL211的打印和扫描一体机。这台机器跑了有四年多了,cpu的风扇不行了,温度过高,系统自动关机。咋整呢?再买一台机器?有点浪费。正好去年入手一台HP的Gen8微型服务器,装的是Ubuntu14.04的系统,闲来无事,搞搞吧。
Stella981 Stella981
4年前
JVM(7)之 从GC日志分析堆内存
在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存。   首先我们来了解几个相关的参数:
Wesley13 Wesley13
4年前
Java基础学习总结(12)——一哈希编码HashCode
一、哈希编码  现在是站在JAVA虚拟机的角度来看内存里面的布局,站在JAVA虚拟机的角度,在内存里面有好多好多个对象,这里用椭圆来代表一个个对象。一个程序运行起来的时候,可能会有很多个对象在内存里面分配,那么对于JAVA虚拟机来说,它运行的时候需要找到这些对象的地址,这些对象的地址怎么找呢?JAVA虚拟机会用一张表记录每一个对象在什么位置