自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

转载 javascript中闭包的工作原理

一、什么是闭包?官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:fu

2016-06-21 14:20:34 336

转载 Java 自动装箱与拆箱(Autoboxing and unboxing)

什么是自动装箱拆箱基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = new Class(parameter); 当我们创建一个Integer对象时,却可以这样: Integer i = 100; (注意:不是 int i =

2016-06-17 10:53:47 503

转载 Java线程与Xss

Xss与线程个数Xss越大,每个线程的大小就越大,占用的内存越多,能容纳的线程就越少;Xss越小,则递归的深度越小,容易出现栈溢出 java.lang.StackOverflowError。减少局部变量的声明,可以节省栈帧大小,增加调用深度。/** * -Xss128K deep of calling = 675 * -Xss256K deep of calling = 1

2016-06-15 14:00:04 758

转载 关于Object=null

赋null值在JIT编译之后会被消除掉,这个时候将变量设置为null是没有意义的,实际上JIT编译成本地代码后,gc可以正常回收掉,无需多余操作。另外,当方法结束后,脱离作用域之后,相应的局部变量引用会自动被注销掉。小结:当遇到局部代码段中已经申请许多占用空间的对象,这些对象在其作用域内的后续代码中还需要执行相对较长的时间,并且这块内存的确在后面就不会再使用了的时候,可以手工将

2016-06-15 13:59:02 1072

转载 Survivor空间溢出实例

本文演示survivor空间溢出的场景。实例代码class MemoryObject{ private byte[] bytes; public MemoryObject(int objectSize){ this.bytes = new byte[objectSize]; }}/** * eden 13184K ,s0/s1

2016-06-15 13:58:38 2250

转载 年老代过大有什么影响

年老代大部分是活着的对象,那么年老代过大,或者对象过早提升到年老代,导致年老代存活对象过多,那么如果做一次FullGC,寻找活着的对象,那么对于性能可想而知。如果系统频繁地发生FullGC的话,而这些或者的对象在这么短的时间内被注销的概率很低,那么FullGC的时间越长,就会有越多的请求得不到响应或者响应很慢,它们所持有的内存就无法释放掉,就会有越多的对象进入Old区域,这就会在一个点上产

2016-06-15 13:58:07 751

转载 Java对象分配简要流程

本文主要简述Java对象在内存中的分配过程总体流程分配流程逃逸分析逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用。方法逃逸:例如作为调用参数传递到其他方法中。线程逃逸:有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量。栈上分配(Stack Alloc

2016-06-15 13:57:14 813

转载 Java的类加载机制

本文主要讲述Java类的加载机制,主要包括类加载器、加载过程、初始化时机。一、类加载器1、ClassLoader抽象类类加载器的任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM内部,然后转换为一个与目标类对应的java.lang.Class对象实例。如果需要支持类的动态加载或需要对编译后的字节码文件进行解密操作等,就需要与类加载器打交道了。B

2016-06-15 13:55:37 293

转载 Java对象结构及大小计算

Java对象内存布局在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头HotSpot虚拟机的对象头包括两部分信息:第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏

2016-06-15 13:54:42 4651 3

转载 Java类的初始化顺序

本文主要演示Java类的初始化顺序初始化顺序对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。实例代码public class InitialOrderTest { /* 静态变量 */ public static String staticField = "静态变量

2016-06-15 13:53:29 197

转载 jvm的card table数据结构

作用为了支持高频率的新生代的回收,虚拟机使用一种叫做卡表(Card Table)的数据结构,卡表作为一个比特位的集合,每一个比特位可以用来表示年老代的某一区域中的所有对象是否持有新生代对象的引用。这样新生代在GC时,可以不用花大量的时间扫描所有年老代对象,来确定每一个对象的引用关系,而可以先扫描卡表,只有卡表的标记位为1时,才需要扫描给定区域的年老代对象。而卡表位为0的所在

2016-06-15 13:52:49 3543

转载 GC通用日志解读

本文主要讲述gc日志的解读。除了CMS和G1收集器的GC稍微特殊外,其展示形式其实都大同小异。通用日志格式各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志:33.125: [GC [DefNew: 3324K->152K(3712K), 0.0025925 secs] 3324K->152K(11904K), 0.0031680 secs]100.667: [F

2016-06-15 13:52:06 463

转载 JVM信息查看

本文主要讲述如何查看java应用的jvm信息。1、查看所有参数 jinfo -flags pidJava -XX:+PrintCommandLineFlags 这个参数的作用是显示出VM初始化完毕后所有跟最初的默认值不同的参数及它们的值。 (JDK5以上支持)-XX:+PrintFlagsFinal显示所有可设置的参数及它们的值( JDK 6 update 21开始才可以用

2016-06-15 13:50:54 1034

转载 GC策略的评价指标

1、吞吐量应用系统的生命周期内,应用程序所花费的时间和系统总运行时间的比值。系统总运行时间=应用程序耗时+GC耗时。如果系统运行了100分钟,GC耗时1分钟,则系统吞吐量=99%2、垃圾回收器负载垃圾回收器负载=GC耗时/系统总运行时间3、停顿时间垃圾回收器运行时,应用程序的暂停时间4、垃圾回收频率垃圾回收器多长时间运行一

2016-06-15 13:50:02 628

转载 GC的三大高级算法

序GC的基本算法,大体上都逃不出标记清除法/标记压缩法、复制收集算法、引用计数法这三种方式以及它们的衍生品。现在,通过对这三种方式进行融合,出现了一些更加高级的方式。这里,我们介绍一下其中最有代表性的三种,即分代回收、增量回收和并行回收。有些情况下,也可以对这些方法中的几种进行组合使用。1、分代回收首先,我们来讲讲高级GC技术中最重要的一种,即分代回收(Generation

2016-06-15 13:49:09 888

转载 GC的三大基础算法

1. 垃圾(Garbage)就是需要回收的对象。作为编写程序的人,是可以做出“这个对象已经不再需要了”这样的判断,但计算机是做不到的。因此,如果程序(通过某个变量等等)可能会直接或间接地引用一个对象,那么这个对象就被视为“存活”;与之相反,已经引用不到的对象被视为“死亡”。将这些“死亡”对象找出来,然后作为垃圾进行回收,这就是GC的本质。2、根(Root)就是判

2016-06-15 13:48:18 6245 2

转载 垃圾回收基础

1、性能属性:(1)吞吐量:不考虑垃圾收集引起的停顿时间或内存消耗,垃圾收集器能支撑应用程序达到的最高性能指标(2)延迟:缩短由于垃圾收集引起的停顿时间或完全消除垃圾收集所引起的停顿,避免应用程序运行时发生抖动(3)内存:垃圾收集器流畅运行所需要的内存数量任何一个属性性能的提供几乎都是以另外一个或两个属性性能的损失作为代价的。2、原则:(1)MinorGC回

2016-06-15 13:47:19 390

转载 JVM 系列:

JVM 系列:垃圾回收基础JVM的编译策略GC的三大基础算法GC的三大高级算法GC策略的评价指标JVM信息查看GC通用日志解读jvm的card table数据结构Java类初始化顺序Java对象结构及大小计算Java的类加载机制Java对象分配简要流程年老代过大有什么影响Surv

2016-06-15 13:46:31 317

转载 JVM 编译策略

解释器当虚拟机启动时,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样可以省去许多不必要的编译时间。并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,,将有价值的字节码编译为本地机器指令,以换取更高的程序执行效率。hotspot中内嵌有2个JIT编译器,分别为Client Compiler,Server Compiler,但大多数情况下我们称之为C1

2016-06-14 16:50:26 1470

转载 快速排序

#include  using namespace std; void Qsort(int a[], int low, int high){    if(low >= high)    {        return;    }    int first = low;    int last = high;

2016-06-07 16:23:16 172

转载 堆排序

1.堆  堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:  Key[i]=Key[2i+1]&&key>=key[2i+2]  即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。  堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]22.堆排序的思

2016-06-07 16:19:32 244

转载 Python的内存管理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理方式。 对象的内存使用赋值语

2016-06-07 09:43:06 447

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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