内存参数

JVM实用参数(四)内存调优

混江龙づ霸主 提交于 2020-04-08 13:15:35
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和运维人员很有帮助。 所有已制定的HotSpot内存管理和垃圾回收算法都基于一个相同的堆内存划分:新生代(young generation)里存储着新分配的和较年轻的对象,老年代(old generation)里存储着长寿的对象。在此之外,永久代(permanent generation)存储着那些需要伴随整个JVM生命周期的对象,比如,已加载的对象的类定义或者String对象内部Cache。接下来,我们将假设堆内存是按照新生代、老年代和永久代这一经典策略划分的。然而,其他的一些堆内存划分策略也是可行的,一个突出的例子就是新的G1垃圾回收器,它模糊了新生代和老年代之间的区别。此外,目前的开发进程似乎表明在未来的HotSpot JVM版本中,将不会区分老年代和永久代。 -Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize) -Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大小。一般来说

使用libjpeg进行图片压缩

空扰寡人 提交于 2020-04-07 21:26:25
简介 由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有: OOM,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oom问题的建议,但是由于网友的水平不一也导致建议参差不齐。(内存) 图片压缩再加载失真严重,或者压缩率不够达不到项目要求的效果。(外存) 那我今天就要解决的就是通过今天查阅的资料和自己的判断,还有实践归档一下图片在Android上的问题。并且给出自己解决图片压缩问题的解决方案和实际操作。 1、为什么Android上的图片就不如IOS上的? libjpeg是广泛使用的开源JPEG图像库,安卓也依赖libjpeg来压缩图片。但是安卓并不是直接封装的libjpeg,而是基于了另一个叫Skia的开源项目来作为的图像处理引擎。Skia是谷歌自己维护着的一个大而全的引擎,各种图像处理功能均在其中予以实现,并且广泛的应用于谷歌自己和其它公司的产品中(如:Chrome、Firefox、 Android等)。Skia对libjpeg进行了良好的封装,基于这个引擎可以很方便为操作系统、浏览器等开发图像处理功能。

Linux 内核参数

纵饮孤独 提交于 2020-04-06 21:53:21
牢记!内核参数可以调整,但不是随便乱调,需要根据业务进行判断,并且要知道调整的后果是什么,存在哪些风险。 牢记!!!调整参数时,做好记录!!! 网络参数 /proc/sys/net/core/wmem_max    最大socket写buffer,可参考的优化值:873200 /proc/sys/net/core/rmem_max      最大socket读buffer,可参考的优化值:873200 3. /proc/sys/net/ipv4/tcp_wmem      TCP写buffer,可参考的优化值: 8192 436600 873200 4. /proc/sys/net/ipv4/tcp_rmem      TCP读buffer,可参考的优化值: 32768 436600 873200 5. /proc/sys/net/ipv4/tcp_mem   它有3个值,意思是:   net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.   net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.   net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket.   上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864 6. /proc/sys/net/core/netdev_max

JVM(java 虚拟机)内存设置

别说谁变了你拦得住时间么 提交于 2020-04-06 18:22:13
一、设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定; -Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; -Xmn Java Heap Young区大小,不熟悉最好保留默认值; -Xss 每个线程的Stack大小,不熟悉最好保留默认值; 2. 如何设置JVM内存分配: (1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效): java -Xmx128m -Xms64m -Xmn32m -Xss16m Test (2)当在集成开发环境下(如eclipse)启动并使用JVM时: a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配): -vmargs -Xms40m -Xmx256m -vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。 此处设置的参数值可以通过以下配置在开发工具的状态栏显示: 在eclipse根目录下创建文件options

工作6年,私藏的25个,调优工具/技术网站,我贡献出来了

假如想象 提交于 2020-04-04 18:31:40
工作6年,私藏的25个,调优工具/技术网站,我贡献出来了 对于程序员来说,不停的学习新技术,是我们一直要做的事情,平时不积累,等到金三银四,金九银十的跳槽季节,身边的朋友,一个个的拿着高薪跳槽,自己只能眼巴巴的看着,后悔平时没有积累学习。 其实很多程序员最头疼的事情,就是找学习资料或面试题,我这里,就给大家推荐一些,我赞了6年的优质技术网站,都是我精心挑选的,涵盖:4个算法网站,7个调优排错工具网站,4个问答社区,4个教程网站,4个代码协作平台,都是大家学习IT路上的好帮手,对技术提升有很大帮助,而且都是里免费的! 算法网站 LeetCode https://leetcode.com https://leetcode-cn.com LeetCode: 被称为刷题神器,里面有很编程算法面试的海量题目,可以在线编译运行,难度比较高。如果自己能都做出来,对面试大公司很有帮助。建议一次只针对一种题型进行训练,如数组、链表、二叉树、回溯、动态规划,这样效果会更好。 LintCode https://www.lintcode.com LintCode: 汇集了各大公司的算法面试题,有阶梯式训练题库,帮你选好应该刷的题目,特别适合小白和懒人。评测数独特快,支持中文在线题库,不需要你处理输入和输出,方便了很多,测试速度也很快。 VisuAlgo https://visualgo.net/zh

Java方法

守給你的承諾、 提交于 2020-04-04 17:51:09
什么是方法? Java方法是语句的集合,它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的基础语法 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 1、修饰符:暂时写成public static。修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。 2、返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void,同时方法体中不能编写“return 值(与返回值类型相同);”这样的语句,但是可以编写“return;”这样的语句。只要带有return关键字的语句执行,return语句所在的方法结束。在有返回值的情况下,必须保证“return 返回值;”语句百分百执行(不能放在if、while这些之中;当然if...else...就可以百分百保证能执行,就可以)。 3、方法名:是方法的实际名称。方法名和参数表共同构成方法签名。要是合法的标识符;方法名最好见名知意;最好是动词;首字母小写,后面每个单词首字母大写。 4、参数类型:形参是局部变量

CreateDIBSection函数

瘦欲@ 提交于 2020-04-04 04:22:48
HBITMAP CreateDIBSection( HDC hdc, // handle to DC CONST BITMAPINFO*pbmi, // bitmap data UINT iUsage, // data type indicator VOID**ppvBits, // bit values HANDLE hSection, // handle to file mapping object DWORD dwOffset // offset to bitmap bit values); CreateDIBSection函数会根据位图结构信息(pbmi)分配内存空间,你不用为它分配内存,这块内存也不需要你释放,系统会自己释放的。然后将位图中的图像数据读入这个内存地址,显示即可。 LPBYTE lpBits; HBITMAP hBmp=::CreateDIBSection(dcMem.m_hDC,lpBitmap,DIB_PAL_COLORS, &lpBits,NULL,0); //将图像数据填充到得到的内存地址中 file.ReadHuge(lpBits,dwBitlen); pDC->StretchBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcMem,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);

C#--深入理解类型

女生的网名这么多〃 提交于 2020-04-03 14:33:19
List分组迭代器 说明: 针对长度较大的List对象,可以分组批量进行处理, 如:长度为1000的List对象,可分为10组,每组100条,对数据进行业务逻辑处理... Source /****************************************************************************** * 名称:List分组迭代器 * 说明:针对长度较大的List对象,可以分组批量进行处理 * 如:长度为1000的List<int>对象,可分为10组,每组100条,对数据进行业务逻辑处理 * 作者:Sybs * 时间:2018-10-15 * **************************************************************************/ namespace System.Collections.Generic { /// <summary> /// List分组迭代器 /// </summary> public class ListGroupIterator<T> { private int _groupsize = 1; /// <summary> /// 分组大小(缺省值为1) /// </summary> public int GroupSize { get =>

C#--深入理解类型

北战南征 提交于 2020-04-03 14:29:56
今日无事,回顾了一下C#基础知识,颇有收获,就自己的理解,写了这篇文章,如有不对,欢迎指正。 C#中的类型可以分为两类:值类型与引用类型,如下图所示。 值类型通常被分配到线程的堆栈上,而引用类型则被分配到托管堆上。例如下面例子: valuetype和reftype在内存中的位置如下所示: 从上面可以看出,值类型与引用类型的区别在于实际数据的存储位置: 值类型的变量和实际数据都存储在堆栈中;而引用类型只有变量存储在堆栈中,变量储存着实际数据的地址,实际数据储存在与地址相对应的托管堆中。 但是,上边所说的情况并不是绝对的,也就是说值类型的实例不一定分配到线程堆上。 1 、应用类型中嵌套定义值类型 以上代码内存分配情况如下: 如果类的字段类型是值类型,他将作为引用类型实例的一部分,被分配到托管堆中。但那些作为局部变量(例子中的 c变量)的值类型,则依然会被分配到托管堆中。 2. 值类型中嵌套定义引用类型 内存分配如下: 值类型实例总会被分配到它声明的地方,声明的是局部变量时,将分配到栈上,而声明为引用类型成员时,则被分配到托管堆上;而引用类型实例总是被分配到托管堆上。 值类型与引用类型除了在内存上分布方面的区别,还有以下几个方面的区别: 1、值类型继承自ValueType,ValueType又继承自System.Object;而引用类型则直接继承自System.Object; 2

Java面试常见知识点总结(一)

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-30 16:00:55
1.sleep()和wait(): Java中的多线程是一种 抢占式 的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。 ● 共同点 : (1) 他们都是在 多线程 的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。 (2) wait()和sleep()都可以通过 interrupt() 方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。 需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。 ● 不同点 : (1) 每个对象都有一个锁来控制同步访问。 Synchronized 关键字可以和对象的锁交互