
java虚拟机调优
镜水灵动
读万卷书、行万里路、阅人无数、高人指路、贵人相助和自己去悟。
展开
-
eclipse添加GC信息
1.基础知识:GC一般为堆空间某个区发生了垃圾回收, Full GC基本都是整个堆空间及持久代发生了垃圾回收,通常优化的目标之一是尽量减少GC和Full GC的频率。 收集器名称:一般都为收集器的简称或别名,通过收集器名称基本都能判断出那个区发生了GC。 DefNew:年轻代(新生代)发生了GC (若为DefNew可知当前JVM年轻代使用的串行收集器) ParNew:年轻代(新生代)发生了GC (...原创 2018-03-31 07:42:05 · 593 阅读 · 0 评论 -
分析jvm现状------唯品会开源工具
1.使用唯品会开源工具jmap。(1)首先登陆root账号赋予sh执行权限chmod +x vjmap.sh(2)top查询java pid 27724(3)执行命令,导出整个堆中对象的统计信息,按对象的total size排序:./vjmap.sh -all 27724> /tmp/histo.log(4)查看结果 vim /tmp/histo.log 从日志中我们分析jvm各个分代...原创 2018-06-07 16:43:48 · 892 阅读 · 0 评论 -
深入理解java字节码
Javap 反编译class文件 –verbose 显示冗余信息(1)魔数:所有的class字节码文件的4个字节都是魔数,魔数固定值:0xCAFEBABE(2)版本:魔数之后4个字节是版本信息,前两个字节minor version次版本号例如0,后两个字节是主板号major version例如52表示1.8.0。(3)常量池:主版本后就是常量池入口。常量池的长度不是固定的。Java类中...原创 2018-08-22 17:15:22 · 862 阅读 · 0 评论 -
JVM参数,jmap打印堆快照,jstack实战死锁
1 jinfo指令:如何运行时查看参数值 jinfo -flag MaxHeapSize 23789(查看最大堆:23789即线程id) jinfo -flag ThreadStackSize 23789(查询线程栈大小:默认值1024)2 查看jvm运行时参数 (1)-XX:+PrintFlagsInitial 查看初始值 ...原创 2018-08-28 13:18:03 · 4119 阅读 · 0 评论 -
jvisualvm远程监控tomcat
https://visualvm.github.io/pluginscenters.html根据jdk版本安装对应插件。我的jdk8版本:1.8.102,对应安装JDK 8 Update 40 - 121这个:https://visualvm.github.io/archive/uc/8u40/updates.xml.gz我们要安装两个插件:visualVM gc以及Trace appli...原创 2018-08-28 15:52:54 · 257 阅读 · 0 评论 -
tomcat配置调优与安全总结
原文地址:http://blog.51cto.com/vekergu/1672931作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配置和调优安全的文章非常散,通过参考各位大神的相关技术文档,根据作者对tomcat的运维经验,总结了一些tomcat的基础运维注意事项,希望对广大技术兄弟们有些帮助。 本篇文章只是对tomcat模板的基础调优,除了部署tomca...转载 2018-08-24 11:40:06 · 272 阅读 · 0 评论 -
GC调优实战
1.怎么调优 调优的一般步骤:①首先收集gc日志,②分析日志中的关键性能指标,③分析GC原因,调优JVM参数。 衡量GC的两个指标:①吞吐量 ②响应时间。理想情况下是高吞吐量,低响应时间,但现实往往两个参数是相悖的。 高吞吐量适合场景:科学计算,后台处理等弱交互场景。 高响应时间适合场景:对响应时间有要求的场景。 ...原创 2018-08-24 16:55:17 · 352 阅读 · 0 评论 -
关键业务系统的JVM参数推荐(2018仲夏版)
前言1,资料1. 学习开源项目的启动脚本是个不错的主意,比如ElasticSearch家的,Cassandra家的, 附送一篇解释它的文章。2. VJTools的 jvm-options.sh,伸手党们最爱,根据自己需要稍微定制一下就行。3. JVM调优的"标准参数"的各种陷阱 ,R大的文章,在JDK6时写的,年年期待更新。 前言2, -XX:+PrintFlagsFinal打...转载 2018-08-30 14:47:38 · 1224 阅读 · 0 评论 -
java字节码-this分析
1.this我们用的非常多,但是没有搞清楚为啥我们可以在实例方法中使用this。这里我从java字节码的角度来分析this。2.代码:public class Test { private static String hello(String hello){ return hello + "hello"; } private String s...原创 2018-11-13 19:49:12 · 448 阅读 · 0 评论 -
java字节码分析--异常表
1.根据代码,使用逐行翻译package com.happylaishop.spring.util;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;public class Test { p...原创 2018-11-11 21:11:08 · 1403 阅读 · 1 评论 -
分析java堆---实战java虚拟机读书笔记
1.本文从三方面来分析 (1)内存溢出的原有以及一些解决方案。 (2)堆分析软件介绍。 由于本人能力有限,重点分析内存溢出以及一些解决方案。工具只是提一提。2.首先说堆 我们知道大量对象的分配直接在堆中进行,堆是运行时动态分配的。堆又分浅堆和深堆。 ①浅堆:也就是我们平常所说的对象大小,包括对象本身占用的内存大小,不包...原创 2018-05-31 00:05:39 · 188 阅读 · 0 评论 -
以string为例看编译时常量,运行时常量
String是个对象,默认值为null,但是又是一个特殊的对象。例如赋予一个字符串"a",或new String(),编译时常量:String a = "welcome";运行时常量:String b = new String("welcome");分析:(1)编译时就可以确定时常量“welcome”存放与方法区常量池。(2)new 一定是运行从堆中申请空间存放数据。同时返回推中起始地址给b引用。...原创 2018-04-18 08:06:27 · 694 阅读 · 0 评论 -
JAVA虚拟机调优(1)
本文参考http://pengjiaheng.iteye.com/blog/518623,并加入自己的理解与思考。后续将整理其他博文,书籍,视频的知识完善。若有侵权请及时联系本人。一、数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放...原创 2018-03-26 09:38:17 · 126 阅读 · 0 评论 -
java虚拟机调优(2)
本文参考http://pengjiaheng.iteye.com/blog/518623,并加入自己的理解与思考。后续将整理其他博文,书籍,视频的知识完善。若有侵权请及时联系本人。二、JAVA对象大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属...转载 2018-03-26 09:38:54 · 159 阅读 · 0 评论 -
java虚拟机调优(3)
本文参考http://pengjiaheng.iteye.com/blog/518623,并加入自己的理解与思考。后续将整理其他博文,书籍,视频的知识完善。若有侵权请及时联系本人。三、基本垃圾回收算法(1)引用计数(ReferenceCounting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处...原创 2018-03-26 09:39:26 · 283 阅读 · 0 评论 -
java虚拟机调优(4)
本文参考http://pengjiaheng.iteye.com/blog/518623,并加入自己的理解与思考。后续将整理其他博文,书籍,视频的知识完善。若有侵权请及时联系本人。四、怎么进行垃圾回收1.按分区对待的方式分增量收集(IncrementalCollecting):实时垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。 分代收...原创 2018-03-26 09:40:30 · 206 阅读 · 0 评论 -
java虚拟机调优(5)
本文参考http://pengjiaheng.iteye.com/blog/518623,并加入自己的理解与思考。后续将整理其他博文,书籍,视频的知识完善。若有侵权请及时联系本人。1.选择合适的垃圾收集算法(1)串行收集器用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情...原创 2018-03-26 09:41:15 · 262 阅读 · 0 评论 -
类加载
一、加载: 1.通过类的全限定名来获取此类的二级字节流。 2.将字节流所代表的的静态存储结构转化为方法区的运行时的数据结构。 3.在内存生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。二、验证:为了确保class文件字节流中包含信息符合当前虚拟机的要求。 1.文件格式验证:验证字节流是否符合class文件定义的规范。 2.元数据校验:对字节码描述的信息进...原创 2018-03-26 10:39:14 · 114 阅读 · 0 评论 -
JAVA虚拟机内存结构
1. 方法区:存放虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。2. 堆:虚拟机管理的最大一块内存。同时被多个线程共享。在虚拟机启动的时候创建它,主要来存放对象的实例,几乎所有的java对象实例以及数组都要在这里分配内存。并且通过gc来自动管理。堆的大小可以通过-Xmx和-Xms参数调整。堆使用的内存不一定在物理上是连续的,但是逻辑上一定是连续的。若堆中没有...原创 2018-03-26 11:10:01 · 222 阅读 · 0 评论 -
图解java虚拟机
原创 2018-03-28 14:33:16 · 267 阅读 · 0 评论 -
java内存溢出小demo
1.检查代码级别的堆移除 在eclipse启动项目的时候,run configuration: VM arguments:输入 -XX:+heapDumpOnOutOfMemoryError -Xms20m -Xmx20m2.一旦内存溢出就会在代码所在的文件下生成一个堆快照。(java_pidxxx.hprof)3.从网上下载eclipse memory analyzer。导入hprof文件。可以...原创 2018-03-29 09:34:21 · 624 阅读 · 0 评论 -
Java 永久代去哪儿了
Java 永久代去哪儿了Monica Beckwith段建华阅读数:161522015 年 8 月 17 日在 Java 虚拟机(以下简称 JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表。在过去(当自定义类加载器使用不普遍的时候),类几乎是“静态的”并且很少被卸载和回收,因此类也可以被...转载 2019-03-23 16:07:15 · 561 阅读 · 0 评论