技术流水

A man can be destroyed but not defeated.

String.intern()方法详解

在JDK1.6中,所有共享的 String 对象都存储在 PermGen(方法区) 中,PermGen 的大小是固定的并且在运行时是无法扩展的。你可以使用 -XX:MaxPermSize=N 配置来调整它的大小。到了Java7时代,字符串池的位置被调整到 heap 中了,这意味着你再也不会被固定的...

2017-05-30 22:06:03

阅读数 267

评论数 0

消息持久化

默认情况下,RabbitMQ的交换器、队列和消息都是非持久化的,重启RabbitMQ服务器后,所有东西都会消失,如果需要持久化消息,需要完成以下几个步骤: 设置队列和交换器的durable属性为true 在消息发布前,通过把它的“投递模式”(delivery mode)选项设置为2来把消息标记为持...

2017-05-29 20:44:06

阅读数 323

评论数 0

虚拟主机

每一个Rabbit都可以创建虚拟消息服务器(vhost),每一个都有自己的交换器、绑定和队列,vhost之于Rabbit服务器就像虚拟机之于物理服务器。它既能将Rabbit的众多客户区分开,又可以避免交换器和队列的命名冲突。   连接Rabbit时必须指定vhost,默认vhost是“/”,缺省...

2017-05-29 20:19:41

阅读数 241

评论数 0

消息通信

生产者和消费者  生产者(producer)创建消息,然后发送到代理服务器(RabbitMQ)。消息包含两部分:有效载荷(payload)和标签(label)。有效载荷是你想要传输的数据,可以是任何内容,比如图片、json等,标签描述了有效载荷,用于确定消费者。   消费者(consumer)订...

2017-05-29 16:17:03

阅读数 322

评论数 0

RabbitMQ简述

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP(高级消息队列协议)消息队列服务器,使用Mnesia数据库存储服务器信息,比如队列元数据、虚拟主机等使用RabbitMQ 1.安装Erlang 2.获取RabbitMQ安装包并解压 3.创建日志文件夹和Mnesia数据库文件夹 ...

2017-05-29 16:12:05

阅读数 235

评论数 0

调用方法

方法调用  方法调用是指确定被调用方法的版本(即调用哪一个方法),而不是具体方法里面代码的执行。   Java程序编译后生成的是Class文件,Class文件的编译过程并不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都是符号引用,而不是方法在实际运行时内存布局中的入口地址。这...

2017-05-29 10:50:39

阅读数 417

评论数 0

运行时栈帧结构

概述  栈帧用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机栈的栈元素,存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。   在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数...

2017-05-28 21:39:53

阅读数 785

评论数 0

类加载器

概述  虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为“类加载器”。   对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟中...

2017-05-28 21:28:20

阅读数 126

评论数 0

类的加载过程

概述  类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:      解析阶段在某些情况下可以在初始化阶段之后再开始。初始化的发生时间  虚拟机规范没有规定什么情况下进行加载过程,但规定了有且...

2017-05-28 13:16:34

阅读数 206

评论数 0

字节码指令集

具体参见:字节码指令集简介

2017-05-28 12:59:22

阅读数 155

评论数 0

属性表集合

属性表(attribute_info)在前面的讲解之中已经出现过数次,在Class文件、字段表、方法表都可以携带自己的属性表集合,以用于描述某些场景专有的信息。      虚拟机规范定义的属性 Code属性  Java程序方法体中的代码经过Javac编译器处理后,最终变为字节码指令存...

2017-05-28 12:47:11

阅读数 1079

评论数 1

class文件常量池

常量池的入口需要放置一项u2类型的数据,代表常量池容量计数值(constant_pool_count)   常量池中主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References) 字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为final的常...

2017-05-28 12:15:53

阅读数 211

评论数 0

class文件结构

概述  Java虚拟机实现了语言无关性的关键在它不和包括Java在内的任何语言绑定,它只与“class文件”这种特定的二进制文件格式关联,Class文件中包括了Java虚拟机指令集和符号表以及其他辅助信息,编程语言语言只要实现自身的编译器,将源码编译成class文件,即可以在JVM上运行。时至今日...

2017-05-28 11:27:02

阅读数 167

评论数 0

JDK工具

JDK命令行工具jps:虚拟机进程状况工具  用于列出正在运行的虚拟机进程,并显示虚拟机执行主类(main函数所在类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID),对于本地虚拟机进程来说,LVMID与操作系统的进程ID是一致的...

2017-05-10 11:12:27

阅读数 173

评论数 0

内存分配与回收策略

优先在Eden区分配  大多数情况下,对象优先在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。   -XX:PrintGCDetails:打印内存回收日志   -XX:SurvivorRatio=8:Eden区和Survivor区的空间比例是8:...

2017-05-06 13:17:52

阅读数 352

评论数 0

垃圾收集器

收集器概览  上面一个区域是新生代收集器,下面一个区域是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。Serial收集器  采用复制算法,单线程,在垃圾收集时必须暂停其他所有的工作线程,直到收集结束。适用于小型client应用,如桌面应用。下图为Serial和Serial Ol...

2017-05-06 12:54:07

阅读数 168

评论数 0

垃圾收集算法

标记-清除算法  缺点:会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配大对象时,无法找到足够的连续内存而不得不提前出发一次垃圾收集动作。复制算法  将内存划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把...

2017-05-06 12:44:06

阅读数 147

评论数 0

确定可回收内存

垃圾回收关注的是堆和方法区两个区域。可达性分析算法以“GC Roots”对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,则此对象是不可用的。 可做为GC Roots的对象包括以下几种: 虚拟机栈(栈帧中的本地变量表)中引用的对象...

2017-05-06 12:36:16

阅读数 167

评论数 0

安装Eclipse Memory Analyzer

1、在官网下载压缩包:http://www.eclipse.org/mat/ 2、将压缩包解压到Eclipse的dropins目录下 3、重启Eclipse

2017-05-06 12:29:03

阅读数 131

评论数 0

对象的访问定位

1、使用句柄 优点:当对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要修改2、使用直接指针(HotSpot使用这种方式) 优点:速度更快,节省了一次指针定位的时间开销

2017-05-06 12:28:48

阅读数 103

评论数 0

提示
确定要删除当前文章?
取消 删除