J9

Java9新特性

非 Y 不嫁゛ 提交于 2021-02-13 20:23:33
转载:http://blog.csdn.net/qq_32524177/article/details/77014757 写在前面的话:Java9来了,搜索了很多关于Java9的新特性,但文献不多,特翻译这篇概括性比较强的官方文章以供参考,本人英文水平有限,虽力求每个词语准确,但必然会有一些偏差,请海涵纠正,,详细的更新内容请点击超链接。 在java9中发布了哪些大家期待的令人振奋的新特性呢? 不要因为java9发布前的相对平静就不关注它!JDK的核心代码提交者们正在努力地为下个版本的发布做准备,这个版本预计于2017年9月就可以被普遍使用。 早期的可访问项目构建(access builds)已经随处可见,现在我们正通过" Java9倒计时网 "为能够获取这个版本倒计时. 现在我们能够获得一张相当清晰的,我们能期望在java9中出现的新特性蓝图.如果Java8能被描述成主要是Lambda表达式、数据流和API变更的发布版本,那么java9主要是 Jigsaw (The primary goals of this Project are to:Make the Java SE Platform, and the JDK, more easily scalable down to small computing devices;Improve the security and

架构设计之高可扩展性

老子叫甜甜 提交于 2021-02-12 03:17:06
点击上方“ JavaEdge ”,关注公众号 设为“ 星标 ”,好文章不错过! 高可扩展性表示可通过加机器线性提高系统处理能力,承担更高流量和并发。 由于峰值的流量不可控,不可能在系统架构设计初期就考虑好机器数量以支持并发。 一般基于成本考虑,在业务平稳期,会预留30%~50%冗余机器应对运营活动或者推广可能带来的峰值流量,但当有突发事件时,流量可能瞬间提升几倍。莫过于明星公布恋情,大家都会到两人微博下互动,微博流量短时内迅速增长,微博信息流也短暂出现无法刷新消息,系统一时间不可用。 所以如何应对突发的流量呢? 最快的方式就是堆机器。不过能保证扩容三倍机器后,系统也能支撑三倍的流量吗? 系统瓶颈在哪里? 通过在单机系统中增加处理核心,可增加系统的并行处理能力,但当并行任务数较多时,系统会因为争抢资源而达到性能拐点,处理能力不升反降。 集群系统也是这样。不同的系统分层上可能存在一些“瓶颈”,这些瓶颈点制约着统的横向扩展能力。 比如系统流量1000 QPS,对DB也是1000 QPS。若流量增加10倍,虽然系统可通过扩容正常服务,DB却成瓶颈。或单机网络带宽50Mbps,若扩容到30台机器,前端负载均衡带宽就超过千兆带宽限制,也会成为瓶颈点。 所以系统中存在哪些服务会成为系统扩展的瓶颈呢? 无状态的服务和组件很易于扩展,但是MySQL这种存储服务有状态,较难扩展

.NET 反编译调试神器:dnSpy了解一下

亡梦爱人 提交于 2021-01-17 06:38:43
如果客户环境出了问题,而又无法快速定位问题,可以借助dnSpy进行反编译调试跟踪。 可前往[dnSpy官网下载: https://github.com/0xd4d/dnSpy ]或直接从我的[分享链接: https://1drv.ms/u/s!Ag9J9FrcQ96Zg-hU64GPaM-GtASMCA ]下载(内置包含.NET Framework 4.7.1,若运行提示需要安装,可解压找到 . NET Framework 4.7. 1- x86 - x64 - AllOS - ENU . exe 安装)。 具体操作步骤如下所示: 添加系统环境变量, COMPLUS_ZapDisable = 1 如果需要调试IIS进程,可进入 C : \Windows\System32\inetsrv 目录执行 appcmd list wp 查看对应的应用程序池进程ID 打开dnspy,调试-->附加到进程-->选择相应的进程ID-->附加(支持同时附加多个进程) 调试-->窗口-->模块-->搜索要调试的程序集-->双击 在程序集资源管理器找到要调试的类打开,打断点即可 右键要修改的类文件-->编辑类/方法-->修改类-->编译 文件-->保存模块-->选择要保存的路径-->保存 将保存的重新编译的程序集替换到目标路径即可 执行 iisreset (若为IIS应用) 图一:配置环境变量 图二

Java运行时数据区域

半腔热情 提交于 2020-12-18 04:24:41
   Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自不同的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1. 程序计数器   程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。   由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。   如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的事Native方法

api如何获取cookie

白昼怎懂夜的黑 提交于 2020-12-02 22:09:13
Cookie是客户端发起请求后,服务器返回的,存在浏览器里的一段文本信息,包含用户的登录信息,用于服务器辨别用户的状态。 在api测试中,测试人员需要模拟业务流程,例如用户登录后,进行登录状态的判断(登录状态下才可以加购、付款。),这时候就需要用到cookie。 那么,如何获取cookie呢?本文介绍如何使用eolinker进行api登录请求并获取cookie。 使用地址: www.eolinker.com 首先打开eolinker快速测试,正确填写url、请求头部等信息后发起测试。 测试成功后,eolinker会自动保存cookie,点击上图红色框框cookie管理,即可看到cookie信息。该cookie信息可以用于流程测试的下个步骤,用于判断登录状态。 另外,eolinker还提供了快速生成测试代码功能,点击cookie管理右侧的生成测试代码按钮,可以设置生成多种语言测试代码,使用起来非常方便且易上手。 来源: oschina 链接: https://my.oschina.net/u/4663426/blog/4771126

Java虚拟机一:运行时数据区域

霸气de小男生 提交于 2020-11-30 23:45:40
  java虚拟机在执行java程序的过程中,会把内存划分为若干个不同的数据区域。每个区域都有各自的用途,创建和销毁时间,按照《java虚拟机规范(Java SE 7 版)》的规定,虚拟机运行时数据区域主要有以下几种: 1.程序计数器   程序计数器是很小的一块内存区域,可以看做是当前线程所执行字节码的行号指示器。在虚拟机的概念模型中,字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能均依赖于程序计数器。在多线程中,每个线程都有一个独立的程序计数器,每个线程的程序计数器之间互不影响,即“线程私有”。同时,程序计数器是java虚拟机规范中唯一一个没有规定OutOfMemoryError的区域。 2.java虚拟机栈   虚拟机栈描述的是java方法执行的内存模型,每个方法在执行时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个方法从被调用执行到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。虚拟机栈也是线程私有的。在Java虚拟机规范中,虚拟机栈有两种异常状况: (1)线程请求的栈深度大于虚拟机栈所允许的深度,将抛出StackOverflowError异常; (2)如果虚拟机栈可以动态扩展,但扩展时无法申请到足够的内存

RabbitMQ基本使用六(主题模式)

心已入冬 提交于 2020-11-24 18:28:51
Hello, 大家好,我是一名在互联网捡破烂的程序员 在上一期呢,我们讲到了工作队列的使用,还没有打怪升级的小伙伴先去修炼哦 RabbitMQ基本使用(路由模式) 今天呢,我们要继续打怪升级哦。 今天我们来讲一讲比较高级的消息方式,嗯,我想一下,是什么呢? 这下不会再翻车的???? 哼哼,我已经提前看过了 那就开始我们的表演了 一、开篇前提 那我们就开始吧,今天就讲一讲主题模式 何为主题模式呢? 在此之前我们也要回顾上一期的内容 在上一期我们讲到了路由模式。路由模式的概念呢,就是我们想要接收哪一个路由发送过来的消息,我们在消费者中就定义相同路由名称就OK了。 那么缺点是什么呢?路由模式下,我们定义的路由键是固定的。如果定义了很多路由,那么会定义很多个路由键,这样就不好维护了,这不就又炸了吗? 心不慌,手不抖,我们跟着感觉走 1. 何为主题模式(topics) 那么主题模式呢?其实和路由模式类似,路由模式指定的路由建是固定的,而主题模式是可以模糊匹配路由键,就类似于SQL语句中的 = 和 like 的关系 P:消息生产者 X:交换机 Q1,Q2:队列 C1,C2:消息消费者 topics模式与routing模式比较接近,topics模式不能具有任意的routingKey,必须由一个英文句点号"."分割的字符串(我们将被句点号"."分割开的每一段独立的字符串称为一个单词),比如:fc

JVM中的新生代、老年代和永生代

谁都会走 提交于 2020-11-21 12:25:31
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。 2.年轻代中的GC HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例,接下来我们会聊到。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。 因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。 在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区

JVM 的 GC 简单知识

喜欢而已 提交于 2020-10-24 08:37:22
JVM 内容 在 jvm 中内存大概可以这样划分。(1.6 和1.8 有些区别) 我们经常看到的 “PermGen space” 其实指的就是方法区。不过方法区和“PermGen space”又有着本质的区别。前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有“PermGen space”,而对于其他类型的虚拟机,如JRockit(Oracle)、J9(IBM)并没有“PermGen space”。 PS:以上图片取自 https://www.pianshen.com/article/9674355417/ (侵删) 在java 1.8之后,方法区就被移除了,替换的是metaspace,这个在 Metaspace 有介绍。 Heap heap的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。 进一步看 heap的划分。 大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s0 或者 s1,并且对象的年龄还会加 1(Eden区->Survivor 区后对象的初始年龄变为1),当它的年龄增加到一定程度(默认为15岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。 GC 本文简单讲述一下gc的类型及触发条件

原型模式Prototype

|▌冷眼眸甩不掉的悲伤 提交于 2020-10-15 06:26:50
一 概述 新建一个标准化的word文档,这个过程其实是在实例化,称之为“零号”文件; 当写好了文档后,把这个文件复制给其他公司员工去填写,则这个零号文件被称之为“原型”; 原型模式,实际上是从原型实例复制克隆出新实例,而不是重新实例化类; 二 使用示例 原型类构造、深拷贝与浅拷贝 package cn.http.test; /** * 原型类:敌机 * * @author:wjm * @date:2020/6/16 14:29 */ public class EnemyPlane implements Cloneable { private Bullet bullet = new Bullet(); private int x; private int y = 0; public void setBullet(Bullet bullet) { this.bullet = bullet; } @Override protected EnemyPlane clone() throws CloneNotSupportedException { /** * Java中的变量分为原始类型和引用类型; * 浅拷贝:只拷贝原始类型的值、引用类型的地址: * 比如坐标x, y的值、对象bullet的地址会被拷贝到克隆对象中,对于bullet,拷贝的所有地址都指向同一个bullet * 下面这句代码