Java垃圾收集器

说到如何进行Jvm虚拟机优化,第一时间想到应该都是配置堆内存的大小,其次就是Java垃圾收集器了。Java垃圾收集器的配置对于Jvm优化来说是一个很重要的选择,选择合适的垃圾收集器可以让Jvm的性能有一个很大的提升。截止Jdk 1.8,一共有7款不同的垃圾收集器。每一款不同的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。

阅读全文 »

Java垃圾收集

众说周知,Java与C同为支持面向对象的语言,但他们对内存的管理方式却有很大的不同。C开发者往往需要手动调用内存分配函数对内存进行分配,并在使用完这块内存之后,手动进行释放。而Java开发者一般来说不需要关心内存是如何进行分配的,只需要将精力放在业务开发上。

阅读全文 »

Java内存溢出异常(下)

此篇是上一篇文章Java内存溢出异常(上)的续篇,没有看过的同学,可以先看一下上篇。本篇文章将介绍剩余的两个溢出异常:方法区和运行时常量池溢出。

方法区和运行时常量池溢出

这部分为什么会放在一起呢?在Java内存区域与内存溢出异常这篇文章中我们说过,运行时常量池实际上属于方法区的一部分,所以就放在一起讨论。

阅读全文 »

Java内存溢出异常(上)

上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识。如果有没看过上一篇文章的小伙伴们,请点击Java内存区域与内存溢出异常

Java的内存溢出异常主要分为两类:分别是内存溢出和栈溢出。

阅读全文 »

Java内存区域与内存溢出异常

Java的内存管理是一个老生常谈的问题,虽然Java号称可以自动管理自己的内存,使程序员从内存管理的围墙解放出来,但是一连串的内存泄漏和溢出方面的问题,使得我们不得不去深入了解Java的内存管理机制。本篇文章将从Java的内存区域开始剖析Jvm的内存机制,阐述内存溢出异常产生的原因。

阅读全文 »

Javassist之字节码级的API

Javassist提供了低级API来直接编辑类文件。为了使用这些API,你需要详细了解Java字节码和类文件的格式,这样你就可以通过这些API对类文件进行各种修改。

如果你想要产生一个简单的类文件,javassist.bytecode.ClassFileWriter可能提供了最好的API。它提供了比javassist.bytecode.ClassFile更快的速度,尽管这个API更小一些。

阅读全文 »

Javassist之内省与定制(五)

在前几个篇章介绍Javassist如何修改方法体,本篇介绍javassist内省与定制的剩余部分。

1. 添加新的方法或属性

添加方法

Javassist允许用户创建从零开始创建一个新的方法和构造函数。CtNewMethod和CtNewConstructor提供了多种工厂方法,它们都是用来创建CtMethod或者CtConstrutor对象的静态方法。

阅读全文 »

Javassist之内省与定制(三)

前两篇文章我们介绍了如何修改一个方法的方法体,主要通过插入源文本的方式到方法体中。源文本需要是语句或者代码块,这样就可以部分修改方法体。本章我们将详细的讨论如何修改整个方法体。

修改方法体

CtMethod和CtConstructor提供了setBody()来替换全部的方法体。它们编译源文本成为Java字节码且替换原始的方法体。

阅读全文 »