Sweep

第2章—Java内存区域与内存溢出异常

空扰寡人 提交于 2020-05-02 15:40:01
2.1 概述 总结:本章将从概念上介绍 Java 虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题。 2.2 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途以及创建和销毁时间 2.2.1 程序计数器(线程私有) 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任意一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能回复到正确的执行位置,每条线程都需要有一个独立的程序计数器。 如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址; 如果线程正在执行的是 Native 方法,这个计数器值则为空。 可能出现的异常:此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域 2.2.2 Java 虚拟机栈(线程私有) Java 虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 局部变量表存放了编译期可知的各种数据类型、对象引用和 returnAddress 类型

.Net平台GC VS JVM垃圾回收

拈花ヽ惹草 提交于 2020-05-01 21:40:31
原文: .Net平台GC VS JVM垃圾回收 前言 不知道你平时是否关注程序内存使用情况,我是关注的比较少,正好借着优化本地一个程序的空对比了一下.Net平台垃圾回收和jvm垃圾回收,顺便用dotMemory看了程序运行后的内存快照,生成内存快照后,妈妈再也不担心我优化程序找不到方向了。 .Net平台垃圾回收 内存优化 凭空想象这些概念多少会索然无味,下图是我我基于本地的一个程序生成的内存快照,使用jetbrains推出的 dotMemory 工具生成。 生成内存快照 程序运行时可以通过右上角的Get SnapShot按钮生成内存快照,内存快照里可以看到具体的对象、消耗内存的情况,比如说一些大的字符串对象,重复的大量的字符串对象, 那么从上面这张图上都能看到哪些关键字呢? 什么是Heap generation1和Heap greneration2呢? 什么是Allocated呢? 什么是GC GC (Garbage Collection)如其名,就是垃圾收集,当然这里仅就内存而言。Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在 托管堆(Managed Heap) 上动态分配的所有对象,通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用

175210 《网络对抗技术》 Exp5 信息搜集与漏洞扫描

妖精的绣舞 提交于 2020-05-01 09:10:18
一、实践过程 1.各种搜索技巧的应用 1.1 搜索网址目录结构 使用 metasploit 的 brute_dirs,dir_listing,dir_scanner等辅助模块,主要是暴力猜解。原理是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。因为理论上来说,只要字典足够庞大,枚举总是能够成功的。 dir_scanner 模块 use auxiliary/scanner/http/dir_scanner set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 // 设定扫描线程数 exploit dir_listing 模块 use auxiliary/scanner/http/dir_listing set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 exploit brute_dirs 模块 use auxiliary/scanner/http/brute_dirs set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 exploit 1.2 检测特定类型的文件 有些网站会链接通讯录,订单等敏感的文件,可以进行针对性的查找。 解释: site能限制检索结果的来源,格式为“检索词-词语”

175210 《网络对抗技术》 Exp5 信息搜集与漏洞扫描

我怕爱的太早我们不能终老 提交于 2020-05-01 08:49:02
一、实践过程 1.各种搜索技巧的应用 1.1 搜索网址目录结构 使用 metasploit 的 brute_dirs,dir_listing,dir_scanner等辅助模块,主要是暴力猜解。原理是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。因为理论上来说,只要字典足够庞大,枚举总是能够成功的。 dir_scanner 模块 use auxiliary/scanner/http/dir_scanner set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 // 设定扫描线程数 exploit dir_listing 模块 use auxiliary/scanner/http/dir_listing set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 exploit brute_dirs 模块 use auxiliary/scanner/http/brute_dirs set RHOST 47.94.47.203 set RPORT 8080 set THREADS 50 exploit 1.2 检测特定类型的文件 有些网站会链接通讯录,订单等敏感的文件,可以进行针对性的查找。 解释: site能限制检索结果的来源,格式为“检索词-词语”

堆内存常见的分配策略、 经典的垃圾收集器、CMS与G1收集器及二者的比较

馋奶兔 提交于 2020-04-29 10:51:35
堆内存常见的分配策略 针对的是Serial 加 Serial Old 客户端默认收集器组合下的内存分配和回收策略 经典的垃圾收集器 CMS 收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间 为目标的垃圾收集器。从名字可以看出,CMS 是基于 标记-清除 算法的。它的运作过程主要分为四个步骤: 初始标记(CMS initial mark): STW ,标记GC Roots能直接关联到的对象,速度很快。 单线程 并发标记(CMS concurrent mark):从GC Roots的直接关联对象开始遍历整个对象图的过程, 耗时较长 ,不需要停顿用户线程 重新标记(CMS remark): STW ,修正并发标记期间,因用户程序继续运作而导致标记发生变动的那一部分对象的标记记录(增量更新),时间稍长于初始标记,但远低于并发标记 并发清除(CMS concurrent sweep):清除已死亡对象,因为不需要移动对象,所以与用户线程是并发的关系 CMS 的缺点: CMS收集器对处理器资源敏感 。在并发阶段,虽然不会导致用户停顿(STW),但会占用一部分线程(计算机资源)导致应用程序变慢,吞吐量降低。CMS默认开启回收线程数是 (处理器核心数量 + 3)/4 。当处理器核心数量大于4个时,垃圾回收线程只占不超过 25%的处理器资源

svg SMIL Animation动画

北城以北 提交于 2020-04-27 18:51:45
svg path路径绘制:贝塞尔曲线 二次贝塞尔曲线: 三次贝塞尔曲线: 基本参数: 指令字母(绝对坐标) 中文含义 参数示意 具体说明 M 移动到 (moveTo) x,y 路径起始点坐标 Z 闭合路径 (closepath) 将路径的开始和结束点用直线连接 L 直线 (lineTo) x,y 当前节点到指定 (x,y) 节点,直线连接 H 水平直线 x 保持当前点的 y 坐标不变, x 轴移动到 x, 形成水平线 V 垂直直线 y 保持当前点的 x 坐标不变, y 轴移动到 y, 形成垂直线 命令 名称 参数 M moveto 移动到 (x y)+ Z closepath 关闭路径 (none) L lineto 画线到 (x y)+ H horizontal lineto 水平线到 x+ V vertical lineto 垂直线到 y+ C curveto 三次贝塞尔曲线到 (x1 y1 x2 y2 x y)+ S smooth curveto 光滑三次贝塞尔曲线到 (x2 y2 x y)+ Q quadratic Bézier curveto 二次贝塞尔曲线到 (x1 y1 x y)+ T smooth quadratic Bézier curveto 光滑二次贝塞尔曲线到 (x y)+ A elliptical arc 椭圆弧 (rx ry x-axis

JAVA垃圾收集算法总结以及CMS、G1算法详解

本小妞迷上赌 提交于 2020-04-27 18:35:51
  前段时间由于工作原因一直很忙,上周项目验收后时间终于空闲下来,博客也有好几个月没有更新了,趁着还有几天放假,借这个机会写点东西;网上也有很多人写过Java垃圾收集器,特别现在主流比较火的CMS和G1算法,但是我发现很多的博客作者自己都没搞懂,理解的内容都是错误的,反倒误解了很多读者,所以我整理了下网上资料加上自己理解,来写一写CMS、G1算法,并做下简单总结。 从方法论上讲,程序语言的回收算法主要分为 一、引用计数算法(Reference Counting):给对象添加一个引用计数器,每当一个地方引用它时,数据器加1;当引用失效时,计数器减1;计数器为0的即可被回收。 二、根搜索算法(GC Root Tracing):通过一系列的名为“GC Root”的对象作为起始点,从这些节点开始向下搜索,搜索所有走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时(用图论来说就是GC Root到这个对象不可达时),证明该对象是可以被回收的。 Java采用了根搜索算法 ,基本原理根据上面解释应该都能理解,基于根搜索方法,又有具体实现算法 一、标记-清除算法(Mark-Sweep)   最基础的垃圾收集器算法,分为“标记”和“清除”两个阶段,先标记处所需要回收的对象,标记完成后,统一回收掉所有被标记的对象。   缺点:1)效率问题

20165223《网络对抗技术》Exp6 信息搜集与漏洞扫描

*爱你&永不变心* 提交于 2020-04-26 17:23:53
<span id="jump"> </span> 目录 —— 信息搜集与漏洞扫描 <font size=3.5> 实践说明 </font> 实践目标 基础知识问答 <font size=3.5> 实践内容 </font> 各种搜索技巧的应用 Google搜索引擎扫描——Google Hacking msf搜索引擎扫描——搜索网址目录结构 搜索特定类型的文件——结合Google搜索引擎语法的扫描 搜索E-Mali IP路由侦查 DNS IP注册信息的查询 whois域名注册信息查询 nslookup,dig域名查询 IP2反域名查询 IP2Location 地理位置查询 基本的扫描技术 活跃主机扫描 端口扫描 OS及服务版本探测 具体服务的查点 漏洞扫描技术 安装OpenVas 使用OpenVas进行漏洞扫描与分析 <font size=3.5> 实验遇到的问题及解决方法 </font> <font size=3.5> 实验收获与感想 </font> <HR><HR><HR> <font size=5 id="1"><center> 1 实践说明 </font></center> <HR><HR><HR> <h2 id="1.1">1.1 实践目标</h2> 掌握信息搜集的最基础技能与常用工具的使用方法。 <h2 id="1.2">1.2 基础知识问答</h2> (1

业余草分享面试题,JVM结构、GC工作机制详解

感情迁移 提交于 2020-04-26 06:01:58
题外话:最近在应聘阿里2015暑期实习,感触颇多。机会总是留给有准备的人的,所以平常一定要注意知识的巩固和积累。知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你?关于JVM和GC,我相信学java的绝大部分人都听过,很多公司的面试官都爱问,一开始我也很头痛,问这么底层干什么,所以我每次面试也只是看看答案敷衍了事。最近面完阿里感觉真不能这样,知识不仅要知其然,还要知其所以然。其实弄懂了JVM和GC,对我们理解很多java知识都有帮助。网上有很多关于GC和JVM的文章,这篇博文主要是根据我最近看《深入理解Java虚拟机》的一些体会总结出来的,希望对新手有些帮助,也欢迎大牛拍砖。文章主要分为以下四个部分 JVM结构、内存分配、垃圾回收算法、垃圾收集器。下面我们一一来看。 一、JVM结构 根据《java虚拟机规范》规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件到JVM的整个过程,可配合理解。 关于类的加载机制,可以参考 http://blog.csdn.net/tonytfjing/article/details/47212291 ) 2.执行引擎:负责执行class文件中包含的字节码指令(执行引擎的工作机制

Java内存分配及垃圾回收算法(hotspot虚拟机)

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-26 05:48:06
一、运行时内存分配 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 线程私有区域(生命周期与线程相同) a) 虚拟机栈 虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame[1])用于存储局部变量表、 操作数栈、 动态链接、 方法出口等信息。 每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 虚拟机栈中有一个局部变量表,存放了编译期可知的各种基本数据类型(boolean、 byte、 char、 short、 int、float、 long、 double)、 对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。 b)本地方法栈 本地方法栈(Native Method Stack)与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务, 而本地方法栈则为虚拟机使用到的Native方法服务。 c) 程序计数器