metaspace OOM问题解决

1. 什么是metaspace

JDK8中去掉了原来的永久代,而用metaspace来替代。并且metaspace现在是使用了netive memory。

原来放在永久代里面的东西也全部放到元数据区了。元数据区主要包含以下内容:

name and fields of the class: 存放类名字、成员变量相关的元数据

methods of a clas......

JAVA后端问题定位和排错

1. 介绍

原本打算自己总结一下的。但是觉得人家总结的很好,我这里就不浪费笔墨了,给大家推荐一下文章即可。

linux后端诊断与调试技术

PPT-JVM问题定位和排错

下面我对文章中可以重点关注的一些点做一下强调。大家看的时候可以留意下。

2. 查找JAVA进程中消耗CPU最多的线程

这个问题大家可能经常碰到。传统的做法是:

top命令找出有问题Java进程及线程id:

a. 开启线程显示模式(shift+h)

b. 按CPU使用率排序(shift+p,如果按照内存排就shift+m)

c. 记下Java进程id及其CPU高的线程id

......

开源序列化框架google prorobuf3使用

1. 介绍

protobuf是一种非常流行的开源序列化框架。在很多开源软件中被广泛应用。例如netty4中就有protobuf的编码器。

本节主要参考propobuf官方文档和Language Guide (proto3)来对该序列化框架的JAVA中的使用做一些介绍。

2. protobuf3新特性

在Protocol Buffers v3.0.0 release note中我们可以看看protobuf3的新特性:

2.1 主要新特性

移除了required域和用户自定义默认值(类似[default = 1.0]这样的选项没有了)

移除了unknown域

移......

Google Guava介绍

1. 介绍

guava是google开源的一个工具包。其中有很多通用的功能,例如字符串处理、缓存、非空处理等等。

关于其功能和使用说明可以参考并发网上翻译的文章,这里不再赘述:

Google Guava官方教程(中文版)

为什么使用guava可以引用其官方PPT中的观点:

其实你可能发现,一些基本的校验完全可以自己写,但是。。

这些东西仅仅是看起来比较简单,实际上可能比我们想想的要复杂;

用一个公共的lib,别人可能更加容易理解你的代码;

当你用一个主流的开源包的时候,你可能在主流中;

当你发现一个可以提升的点的 时候,如果仅仅是修改自己的私有包,可能没有多少人能够......

使用JAVA并发标注

1. 介绍

看过《JAVA并发实战》应该对其中使用的注解有印象。使用注解来标注程序是否线程安全对维护代码很有好处。

2. 使用

引入maven依赖即可

<!-- https://mvnrepository.com/artifact/net.jcip/jcip-annotations -->

<dependency>

<groupId>net.jcip</groupId>

<artifactId>jcip-annotations</artifactId>

<version>1.0</ver......