xx

Java虚拟机-第三篇-如何优化Java GC

耗尽温柔 提交于 2020-03-02 18:38:07
GC优化是必要的吗? 事实上GC优化对Java基础服务来说在有些场合是可以省去的,但前提是这些正在运行的Java系统,必须包含以下参数或行为: 内存大小已经通过-Xms和-Xmx参数指定过 Xms 是指设定程序启动时占用内存大小 Xmx 是指设定程序运行期间最大可占用的内存大小 运行在server模式下(使用-server参数) 系统中没有残留超时日志之类的错误日志 换句话说,如果你在运行时没有手动设置内存大小并且打印出了过多的超时日志,那你就需要对系统进行GC优化。 JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。 现在来想一想GC优化的最根本原因,垃圾收集器的工作就是清除Java创建的对象,垃圾收集器需要清理的对象数量以及要执行的GC数量均取决于已创建的对象数量。因此,为了使你的系统在GC上表现良好,首先需要减少创建对象的数量。 我们在编码时要首先要把下面这些小细节做好

RESTful API 设计规范

无人久伴 提交于 2020-03-02 04:31:32
关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST) :绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT) :禁令,严令禁止; 应该 (SHOULD) :强烈建议这样做,但是不强求; 不该 (SHOULD NOT) :强烈不建议这样做,但是不强求; 可以 (MAY) 和 可选 (OPTIONAL) :选择性高一点,在这个文档内,此词语使用较少; 参见:RFC 2119 Protocol 客户端在通过 API 与后端服务通信的过程中, 应该 使用 HTTPS 协议。 API Root URL API 的根入口点应尽可能保持足够简单,这里有两个常见的 URL 根例子: api.example.com/* example.com/api/* 如果你的应用很庞大或者你预计它将会变的很庞大,那 应该 将 API 放到子域下( api.example.com )。这种做法可以保持某些规模化上的灵活性。 Versioning 所有的 API 必须保持向后兼容,你 必须 在引入新版本 API 的同时确保旧版本 API 仍然可用。所以 应该 为其提供版本支持。 目前比较常见的两种版本号形式: 在 URL 中嵌入版本编号 api.example.com/v1/* 这种做法是版本号直观、易于调试;另一种做法是,将版本号放在 HTTP

RESETful API 设计规范

和自甴很熟 提交于 2020-03-02 04:13:01
Resetful API 设计规范 本文是为 大渝网 API 开发规范拟定的一个 beta 版,文章大量参考了目前比较常见的 RESETful API 设计。 为了更好的讨论规范带来的争议及问题,现已把该文档整理并开源到 github ,关于大家补充及提问。 关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST) :绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT) :禁令,严令禁止; 应该 (SHOULD) :强烈建议这样做,但是不强求; 不该 (SHOULD NOT) :强烈不建议这样做,但是不强求; 可以 (MAY) 和 可选 (OPTIONAL) :选择性高一点,在这个文档内,此词语使用较少; 参见: RFC 2119 Protocol 客户端在通过 API 与后端服务通信的过程中, 应该 使用 HTTPS 协议。 API Root URL API 的根入口点应尽可能保持足够简单,这里有两个常见的 URL 根例子: api.example.com/* example.com/api/* 如果你的应用很庞大或者你预计它将会变的很庞大,那 应该 将 API 放到子域下( api.example.com )。这种做法可以保持某些规模化上的灵活性。 Versioning 所有的 API 必须保持向后兼容,你 必须

深入理解Java虚拟机(笔记,更新中)

£可爱£侵袭症+ 提交于 2020-03-01 20:31:24
Java 运行时数据区域 1 程序计数器: 是一块较小的内存空间,可以看成,当前线程执行字节码文件的行号指示器,如图可知,这部分是不共享的数据区,如果执行的是Java代码,这个计算器记录的是 正在执行的虚拟机字节码指令地址,如果执行的是Native方法,这个计数器的值为空,该区域是唯一没有内存泄漏问题的区域 2 虚拟机栈: 也是线程私有的,生命周期与线程相同,描述的是Java方法执行的内存模型,每个方法执行的同时也会创建一个栈帧(方法运行时的基本数据结构),每个方法从调用到执行完成的过程,就对应着一个栈帧从入栈到出栈的过程,该区域规定了两种异常 a:线程请求的深度大于虚拟机所允许的深度, StackOverFlowError b:如果虚拟机可以动态扩展(大部分虚拟机都可以)如果扩展时,无法申请到足够的内存, OutOfMemoryError 异常 3 本地方法栈: 线程私有,与虚拟机栈十分的类似,不同点在与,该区域是用来请求Native方法服务的,有的虚拟机甚至将两者合二为一,异常与2一致 StackOverFlowError OutOfMemoryError 4 堆: 堆是Java虚拟机管理的最大一块的内存空间,被所有线程共享的一块内存区域,此区域最大的作用就是用来存放对象的实例(new xxx),是Java垃圾回收机制主要管理的区域,也叫GC堆(垃圾堆),从内存回收的角度来看

整数转换为罗马数字 Integer to Roman

断了今生、忘了曾经 提交于 2020-03-01 10:36:28
问题: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 解决: 【注】 基本字符 I V X L C D M 相应的阿拉伯数字表示为 1 5 10 50 100 500 1000 例如 整数 1437 的罗马数字为 MCDXXXVII, 我们不难发现,千位,百位,十位和个位上的数分别用罗马数字表示了。 1000 - M, 400 - CD, 30 - XXX, 7 - VII。所以我们要做的就是用取商法分别提取各个位上的数字 ,然后分别表示出来: 【罗马数字】 1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 1000~3000: {"M", "MM", "MMM"}. 设数字与罗马数字之间的对应关系:roman[] = {'M', 'D', 'C', 'L', 'X', 'V',

python将.py文件打包生成可执行文件

不问归期 提交于 2020-03-01 09:56:36
确认已经安装PyInstaller库,如果没有,请在命令窗口下执行下列语句进行安装: pip install PyInstaller 安装完成后,在cmd命令窗口, cd打开待打包xx.py的当前目录,执行以下语句即可: pyinstaller - F xx . py 此条语句执行完成后便会在xx.py文件相同路径下生成一个 dist文件夹 ,打包好的可执行文件便在里面。 如果想要改变生成的可执行文件的图标,可以添加一个 -i 参数 (指定打包程序使用icon图标文件) pyinstaller - i xx . icon - F xx . py xx.icon是自己设计的icon小图标(大小一般为64 64或128 128都行) python利用pyinstaller打包的exe执行总是有个命令窗口黑框, 如果想关闭这个小黑窗不显示, 添加一个 -w 参数 即可 : pyinstaller - F xx . py - w 扩展:默认情况下用pyinstaller在Windos生成的是exe执行文件;Mac上生成的文件只是Mac的执行文件。打包生成可执行文件的好处是即使别人电脑上没装python或没有python环境,他也可以运行我们打包好的程序。 来源: CSDN 作者: 二楼后座Tansen 链接: https://blog.csdn.net/qq_39072649

patch命令和diff命令

为君一笑 提交于 2020-03-01 07:00:36
diff命令 :生成补丁包文件 格式 : diff –Nuar 旧版本文件 新版本文件 > 补丁包文件名.patch patch命令 :打补丁命令 格式 :patch –选项 <补丁包文件 例如:假设有version1.c(低版本)和version2.c(高版本)两个文件。可以使用“diff version1.c version2.c >test.patc”命令,生成补丁包“test.patch” diff –Nuar version1.c version2.c > test.patch 利用cat查看补丁包文件内容会看到首行有旧版本、新版本文件目录,接着就是“-”或“<” 或“>” 或“+”跟着要修改的内容。 “<”/“-” :后面跟着要删除的内容。 “>”/“+” :后面跟着要增加的内容。 打补丁命令 -正向补丁 :patch –p0 < test.patch -反向补丁 :patch –Rp0 < test.patch (其中p代表剥离层级,0指略去patch文件0层目录,即从补丁包文件首行目录的根目录开始略去0层目录) 例如下: 1、建立目录x/xx/xxx 2、在xxx目录下新建文件test_old.c、test_new.c 文件内容如下: 3、然后在xx目录用diff命令生成补丁包文件xx.patch 4、我们用cat命令查看补丁包文件首两行内容如下: 我们把补丁包xx

CCF 201512-3 画图(100分)

假如想象 提交于 2020-03-01 03:00:31
问题描述   用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。   … . … … …_ …   ./. /. ||… .|… …/. …   |.|…_ .|.| ).|.| ).|.|.|.|   |.| . ).|… /|… .<|.| |.|   ._ | /| |…| |._\___/.   本题要求编程实现一个用 ASCII 字符来画图的程序,支持以下两种操作:   Ÿ 画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符 - 来画,竖直线段用字符 | 来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符 + 代替。   Ÿ 填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右 4 个方向,如下图所示,字符 @ 只和 4 个字符 * 相邻。   . .    @   . . 输入格式   第1行有三个整数m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。   第2行至第q + 1行,每行是以下两种形式之一:   Ÿ 0 x1 y1 x2 y2

oracle配置net configuration assistant时报12514

跟風遠走 提交于 2020-02-29 16:35:49
最近让我还台式机。不得不把开发环境转到笔记本上,周末搭了一天的环境,今天发现PL/SQL连不上数据库了。之前习惯了用navicat这个工具,一直也没配置过ora文件。 打开oracle的net configuration工具 1.添加本地网络服务名配置 2.添加 3.服务名:即oracle数据库实例名 4.选择TCP协议 5.输入主机名:IP或者名字;使用标准端口号1521 6.进行测试 7.更改登录名 8.不进行继续配置新的网络服务名 9.完成 接着用PL/SQL连接一直连接不上,报ora TNS: 监听程序当前无法识别连接描述符中请求的服务 照网上的解决方案改了一下,还是不成功 http://wangda.blog.51cto.com/86296/218498 突然想起来用navicat连接的时候没有选servicename而是SID,于是打开tnsnaora文件 EMDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.XX.XX.XX)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME= xx) ) ) 把其中的sercie_NAME改成SID,启动PL/SQL,ok,搞定 EMDB = (DESCRIPTION = (ADDRESS

mac上docker pull是报错Error response from daemon: Get https://xx.xx.xx.xx/v2/: Service Unavailable

只谈情不闲聊 提交于 2020-02-29 01:04:02
执行docker pull xx.xx.xx.xx/xx/xx,下载私有库的镜像时报错如下: Error response from daemon: Get https://xx.xx.xx.xx/v2/: Service Unavailable 原因大概是docker默认支持https的协议,而私有库是http的协议。 mac桌面可以在Preferences-->Docker Engine里配置以下代码,xx.xx.xx.xx是自己私有库的地址。 { "insecure-registries":[ "xx.xx.xx.xx" ] } centos系统,修改 /etc/docker/daemon.json,也是新增如下代码。 { "insecure-registries":[ "xx.xx.xx.xx" ] } 来源: https://www.cnblogs.com/kkvt/p/12381156.html