JVM理论-调优-故障分析
深入理解JVM类文件格式
我们知道Java最有名的宣传口号就是:“一次编写,到处运行(Write Once,Run Anywhere)”,而其平台无关性则是依赖于JVM, 所有的java文件都被编译成字节码(class)文件,而虚拟机只需要认识字节码文件就可以了。想要弄懂虚拟机以及类加载机制,这部分内容…
JVM诊断调优CheatSheet
来自 飒然Hang in java
Java HotSwap Ⅲ-Script/Groovy
本篇随笔主要讲述了在线程序通过脚本或者代码进行更新的一个例子.
a.在线程序通常会有更改内存数据或者修复错误逻辑的需求.
b.更改内存数据则通常是找到要修改的对象,然后直接通过加载更新脚本更新对象数据.
c.更改错误逻辑,通常是新写一个class,继承出错的类并覆写出错的…
Tip-Java的双亲委派机制
类加载的双亲委派模型 双亲委派模型要求除了顶层的启动类加载器外,其他的类加载器都应当有自己的父类加载器。这里类加载器之间的父子关系一般不会以继承关系来实现,而是都使用组合关系来复用父加载器的代码 工作过程: 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而…
jvm系列(一):java类的加载机制
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构…
Reloading Java Classes 101: Objects, Classes and ClassLoaders
Welcome to Turnaround article series from ZeroTurnaround.
In this article we will review how to reload a Java class using a dynamic classlo…
jvm优化—— 图解垃圾回收
从这篇开始我们开始探讨一些jvm调优的问题。在jvm调优中一个离不开的重点是垃圾回收,当垃圾回收成为系统达到更高并发量的瓶颈时,我们就需要对jvm中如果进行“自动化”垃圾回收技术实施必要的监控和调节。 对于调优之前,我们必须要了解其运行原理,java 的垃圾收集Garbage …
jvm系列:Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演。 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C…
jvm系列(二):JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了…
一次线上 CPU 飙升问题的分析解决
前几日,下了班在家时突然收到监控报警,线上一组业务机器 CPU 被打满至 100%,为了保持服务的稳定运行,临时采取了升级配置、加机器等粗暴的方法将当晚扛了过去。 半夜想了下可能的原因,由于可能因素太多,不能确定,第二天到公司后,在一台预发机器上把 Java Mission Co…
JVM系列之Java内存结构详解
相信大多数Javaer对Java的内存结构都有一定的了解,但如果对于Java的内存结构只停留的"堆","栈"中显然是不够的。今天来给大家详细谈一谈Java的内存区域结构,本文基于 JDK7 的内存结构做讲解,JDK8的内存结构加上了metaspace,有些许变动,想详细了解的同…
[[Java] CPU 100% 原因查找解决](https://juejin.im/entry/59bfa...
CPU 100%肯定是出现死锁,这个时候观察内存还是够用的,但是CPU一直100%,以下几步解决: 1. 找到进程消耗cpu最大的 2. 打出进程中线程占用情况: 3. dump文件: 4. 找到#2步的PID对应的16进制 5. 在#3的dump文件中找到#4对应的线程堆栈(…
JVMTI 和 Agent 实现
吕 晶 和 邱 小侠 深入 Java 调试体系,第 2 部分
Instrumentation 新功能
作者:胡 睿 和 吕 晶
GC的基本原理
Java 内存模型
在多核时代,如何提高 CPU 的性能成为了一个永恒的话题,而这个话题的讨论主要就是如何定义一个高性能的内存模型,内存模型用于定义处理器的各层缓存与共享内存的同步机制及线程和内存交互的规则。 Java 的世界也有属于它自己的内存模型,Java 内存模型,即 Java Memory Mode…
BTrace 原理浅析
之前在看 agentzh 的此篇博文动态追踪技术漫谈时,领会到了动态追踪技术的强大之处,也一直由于无法在不重启线上服务器的情况下排查线上问题在寻找 Java 中的动态追踪工具。在公司内部的 JavaEE 性能检测框架中,我们使用了 asm 做字节码注入来做线上性能的监测,沿着这个思路,如果要做到动态追踪应该是需要做字节码注入的,但是额外的一点是需要动态加载字节码替换掉原有的类的。此外,性能监测框架是需要耦合到业务应用中的,无法做到一个监测工具的灵活性。
后来听同事提到了 BTrace 这个工具,于是去尝试了一下。BTrace 是 SUN Kenai 云计算开发平台下的一个开源项目,旨在为 java 提供安全可靠的动态跟踪分析工具。江南白衣的这篇文章 http://calvin1978.blogcn.com/... 做了比较详细的描述。
Tip-关于JVM和Hotspot,你也许有这么几个容易晕的问题
1.JVM的结构到底有哪些? 快速过一遍JVM的内存结构,JVM中的内存分为5个虚拟的区域: 堆 ▪ 你的Java程序中所分配的每一个对象都需要存储在内存里。堆是这些实例化的对象所存储的地方。是的——都怪new操作符,是它把你的Java堆都占满了的! ▪ 它由所有线程共享 ▪ …
Btrace 入门到熟练小工完全指南
BTrace 是神器,每一个需要每天解决线上问题,但完全不用 BTrace 的 Java 工程师,都是可疑的。
BTrace 的好处,是可以通过自己编写的脚本,随时获取应用的一切调用信息,而不像原来那样,不断的修改代码,加入 System.out.println(), 然后重启,然后重启,然后重启!!!而且,特别严格的约束,保证自己的消耗特别小,只要定义脚本时不作大死,直接在生产环境打开也没太大影响。
在网上搜索 BTrace 能出来不少文章,都有点旧了,而且不够详细,于是决定,重新写一份。
java 基本数据类型传递与引用传递区别详解
Java 的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是 java 中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法(或函数)的两个专业术语:
按值调用(call by value)
按引用调用(call by reference)
垃圾收集简史
Java 内存模型
通过对 Java 内存模型的了解,加深多线程的并发问题解决方案的理解。
Incremental Mature Garbage Collection Using the Train Algorithm
JVM 1.4.1 中的垃圾收集
JVM内存回收对象及引用分析
自动垃圾回收是Java相较于C++的一个重要的特点,想了解JVM的垃圾回收机制,首先我们要知道垃圾回收是回收什么地方的垃圾,这里的回收主要是指对JVM内存区域的Java堆和方法区的内存的回收。
译-Java内存管理白皮书
说明 有关java并发可以看这里:https://yuedu.baidu.com/ebook... 要学习Java或者任意一门技术,我觉得最好的是从官网的资料开始学习。官网所给出的资料总是最权威最知道来…
说说Java里的equals(上)
在Java字符串那些事儿一文发表后,朋友给我留言说:比较字符串用equals不就完了呗,干嘛要用"==",吃饱了撑的,能不能来点实际的。其实在文章里我是想表明,Java字符串两种声明方式在堆内存中不同的体现,我们在写代码过程中,为了避免重复的创建对象,尽量使用String s1…
jvm 系列 (七):jvm 调优 - 工具篇
jvm 调优 - 工具篇
类和类装入
Dennis M. Sosnoski Java 编程的动态性,第 1 部分
重读 JVM
秋招开始了,前面由于做别的事耽误了半个月,以前学的东西不用就很容易忘记。所以,这次重新阅读《深入理解 JVM 虚拟机》时,想做一个记录。将碎片的知识整合,方便自己以后阅读,同时也和大家一起分享。内容中会添加我自己的理解,其中如果有错误,欢迎大家指正。 相关阅读: 1. 重拾数据…
构建Java Agent,而不是使用框架
本文由 ImportNew - 黄小非 翻译自 javacodegeeks。
JVM调优-学习篇
公司的江南白衣写了一篇关键业务系统的JVM参数推荐(2016热冬版)的文章,大牛的文章总是需要细细品读。这篇文章介绍大量的JVM调优参数,内容也比较多,本文只是列出我自己能理解的一些参数,暂时理解不了的参数就只能等以后自己实力到家了,再慢慢补充上来。 IntegerCache有…