自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 问答 (1)
  • 收藏
  • 关注

原创 编译openjdk并debug hotspot

简单记录一下编译openjdk并debug hotspot的过程1:yum install mercurial #安装mercurial(一种类似git的仓库客户端工具)2:hg clone http://hg.openjdk.java.net/jdk8u/jdk8u openjdk8 #下载 jdk8u相关文件 (我这里下载的是jdk8u不是jdk8)3:cd openjdk8 & sh get_source.sh #下载源码 4:yum install java-1.7.0-o

2022-01-05 21:44:03 878

原创 ubuntu编译linux源码并通过gdb debug

最近在debug linux方法是在vmware上的ubuntu虚拟机上编译linux最新的代码并通过qeum启动然后通过 gdb attach 到linux内核去。编译自己的linux1:先获取linux 源码cd /home/zhaosongqiang/Documents/linux_code/latestgit clonee git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git2:cpoy 一份现在启动的

2021-12-16 22:09:20 2059

原创 ClassNotFoundException与NoClassDefFoundError

jvms规定了下面几种情况下将会抛出NoClassDefFoundError和ClassNotFoundException。1:If the Java Virtual Machine ever attempts to load a class C during verification(§5.4.1) or resolution (§5.4.3) (but not initialization (§5.5)), and the class loaderthat is used to initiate

2021-06-16 10:05:11 333

原创 如何优化系统-Amdahl(阿姆达尔)定律

系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例我们要优化系统应该先定位系统的瓶颈在哪里?哪里的优化价值最大,并且优化难度最小。Amdahl定律简而言之就是首先优化优化价值最大并且难度最小的点。我们假设一个系统分3部分:网络,应用程序,I/O。下面是系统的时间线:|-------------网络(60%)-------------|–应用程序(10%)–|------I/O(30%)-----|如果我们能对网络优化50%,那么对整个系统

2021-06-15 11:25:02 280

转载 Selecting a Collector

Unless your application has rather strict pause time requirements, first run your application and allow the VM to select a collector. If necessary, adjust the heap size to improve performance. If the performance still does not meet your goals, then use the

2021-05-27 15:54:24 84

原创 复现netty的内存溢出

public static void main(String[] args) throws Exception { UnpooledByteBufAllocator ac = new UnpooledByteBufAllocator(true); ByteBuf bf = ac.directBuffer();// bf.release(); bf = null; System.gc(); Thread.slee

2021-05-19 14:13:45 430

转载 When does direct buffer released?

DirectByteBufferdoes not use old Java finalizers. Instead, it uses internalsun.misc.CleanerAPI. It creates new thread and stores aPhantomReferenceto everyDirectByteBuffercreated (except duplicates and slices which refer to the primary buffer). When ...

2021-05-19 09:56:00 95

原创 OutOfMemoryError会不会导致JAVA进程崩溃?

java抛出OutOfMemoryError异常会不会导致进程崩溃?分两种情况:一种是系统内存真的被耗尽了,系统的OOM killer 会杀掉进程。一种是jvm 或者jdk逻辑上的OutOfMemoryError。比如jdk 中ByteBuffer 申请DirectByteBuffer的时候如果此时系统的直接存储已经超过了 -XX:MaxDirectMemorySize 设置的上限,只是简单的抛出OutOfMemoryError异常。...

2021-05-13 19:35:43 1091

原创 遇到一个 javac 编译器优化的坑

先来看下代码,和运行结果package com.zsq;import java.lang.reflect.Field;public class Test { final int a = 3; final Integer b = 3; public static void main(String[] aa) throws NoSuchFieldException, IllegalAccessException { Test s = new Test();

2021-04-25 17:22:51 135

原创 Memory Access Ordering Model

// Memory Access Ordering Model//// This interface is based on the JSR-133 Cookbook for Compiler Writers// and on the IA64 memory model. It is the dynamic equivalent of the// C/C++ volatile specifier. I.e., volatility restricts compile...

2021-04-23 17:19:27 123

原创 WatchService = Inotify + poll

why poll not epoll. because epoll hashigher overhead

2021-04-09 10:08:39 301

原创 BlockIO & Non-BlockIO AsynchronousIO & synchronousIO

先讲一下阻塞和非阻塞IO吧。java的IO接口中只有 SelectableChannel 定义了configureBlocking方法,这个方法的实现在AbstractSelectableChannel这个类中,而这个类的子类只有一些TCP相关实现()(图1)。会发现没有FileChannel从下图(图二)中也可以发现FileChannel没有实现AbstractSelectableChannel为什么 FileChannel不是先非阻塞IO 呢?可以参考https://www.r.

2021-03-31 22:06:42 147

转载 jvm:ObjectMonitor源码

synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享变量的修改能够及时可见(3)有序性:有效解决重排序问题,其用法也有三个: 修饰实例方法修饰静态方法修饰代码块  修饰实例方法 public class Thread1 implements Runn...

2020-11-26 14:32:40 389

转载 How Java volatile prevent instruction reordering

Two roles voliate keywords1, to ensure the visibility of variables: when a modified volatile keyword variable is modified when a thread, other threads can instantly get the results after revision. When a thread writes data to be modified volatile keywor

2020-11-26 09:24:44 143

原创 stack guard page for java

jvm 在创建thread的时候会create_stack_guard_pages()来保护我们的线程栈不能超过指定的大小,如果不对栈做限制的话,一旦其超过了为其分配的大小后,将会覆盖后面内存的数据将会产生意想不到的结果,所以jvm使用了stack_guard_pages来做限制。看图吧:...

2020-10-31 10:49:26 573

原创 如何在JVM内存中确认class文件的常量池?

常量池的描述在java虚拟机规范的4.4节(jvms8)中有很详细的描述,这里就不再描述常量池是什么?其在class文件中是如何表示的?。今天我们主要是看看 hotspotVM 中,如何在内存中查看常量池内容。我们以java.io.FileInputStream.java为例看看它的在hotspotVM中的常量池内容是什么。首先我们通过javap 看看class文件中常量池的表示:然后使用HSDB来看看hotspotVM中的相关内容通过HSDB 我们在hotspotVM内存.

2020-08-20 09:29:46 210

原创 Integer == int 和 Integer == Integer 的区别

首先来写一段代码Integer a = null; Integer b = 3; boolean r1 = a == 24; boolean r2 = a == b;执行结果是:boolean r1 = a == 24;将会产生运行时异常。boolean r2 = a == b; r2 为false为什么呢?我们看看编译代码(javac 前端编译器):从编译代码中我们可以看到一个Integer和一个 int比较时 javac编译器

2020-08-20 09:23:17 410

原创 如何调试hospotVM查找死锁

说明:这篇文章并不会详细说明hospotVM查找死锁的算法,只是介绍一种如何了解hospotVM查找死锁的方法。(授人以鱼不如授人以渔)。毕竟每个人的理解层次不一样。环境:先来写一个死锁public class Test { public static void main(String[] a) { final Object o1 = new Object(); final Object o2 = new Object();

2020-06-06 10:51:47 234

原创 -XX:+UseCompressedOops 与 -XX:-UseCompressedOops

​ 开启(-XX:+UseCompressedOops) 可以压缩指针。 关闭(-XX:-UseCompressedOops) 可以关闭压缩指针。1:关闭(-XX:-UseCompressedOops) 可以关闭压缩指针,对象头16字节(klass pointer 8字节)reference 8字节2:开启(-XX:+UseCompressedOops) 可以压缩指针对象头12...

2020-04-20 21:59:11 8371

转载 Code Tools: jol

http://openjdk.java.net/projects/code-tools/jol/JOL(Java Object Layout) is the tiny toolbox to analyze object layout schemes in JVMs. These tools are using Unsafe, JVMTI, and Serviceability Agent (...

2020-04-20 15:08:27 253

转载 HotSpot设计原理与实现:一、初识HotSpot

一、HotSpot内核模块组成和功能框架1、HotSpot内核模块图(1)Prims模块:(2)Service模块:(3)Runtime模块:二、虚拟机生命周期(JVM初始化过程)1、虚拟机生命周期时序图1:Lancher JVM启动器 Lancher是用于启动JVM和应用程序的工具,HotSpot中提供两种Lancher类型:...

2019-12-10 20:32:25 728

原创 使用jvisualvm定位Full GC频繁的问题

今天性能测试的时候出现一个问题,接口响应时间太长达到了2s。使用JvisualVM定位问题。1:先打开JvisualVM2:找到对应的应用进程(如果需要定位远程应用环境需要远程连接远程)并双击,然后进入Monitor看看CPU和堆内存是否正常,观察发现CPU正常,但是堆内存GC频繁。然后进入 Visual GC查看,发现堆内存Full GC非常频繁,并且Full GC Old区回收的内...

2019-08-13 16:43:40 2719

原创 JvisualVM分分析CPU波动较大的问题

今天遇到一个问题,在压力测试的时候CPU波动很大。采用JvisualVM工具进行分析。1:先打开JvisualVM2:找到对应的应用进程并双击,然后进入Sampler,在CPU波动的时候点击CPU对CPU进行抽样。注意线上环境千万不要使用Sampler右边的Profiler.3:抽样进行一段时间后(建议3分钟左右就行了,时间越长生成的snapshot越大),点击”stop”,然...

2019-08-13 16:41:48 1600

原创 gitlab+jenkins安装配置

1:首先在jenkins上面安装插件 包括gitlab 和maven的插件2:配置Global Tool Configuration 主要是配置maven git 和jdk3:配置 configure system先在gitlab的某个用户上面新建一个API TOKEN然后添加凭据如果你想把jenkins打成的包通过ssh上传到某个服务器上那么你可以配置一个...

2019-06-06 15:10:50 332

转载 Google分布式系统三大论文(三)MapReduce: Simplified Data Processing on Large Clusters

原文地址:https://blog.csdn.net/u010359965/article/details/49795213摘要MapReduce是一个编程模型和一个处理和生成大数据集的相关实现。用户指定一个map函数处理一个key-value对来生成一组中间key-value对;指定一个reduce函数合并所有和同一中间key值相联系的中间value值。许多现实世界中的任务以这个模型展现,...

2019-03-25 16:00:40 742

转载 Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data

原文地址:https://blog.csdn.net/u010359965/article/details/49795133摘要Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据。Google的很多项目将数据存储在Bigtable中,包括Web索引、Google Earth、Google Finance。这些应用对Bigta...

2019-03-25 15:59:33 553

转载 Google 分布式系统三大论文(一)The Google File System

原文地址:https://blog.csdn.net/u010359965/article/details/49795047The Google File System中文版摘要我们设计并实现了Google文件系统,一个面向分布式数据密集型应用的、可伸缩的分布式文件系统。虽然运行在廉价的日用硬件设备上,但是它依然了提供容错功能,为大量客户机提供了很高的总体性能。虽然与很多之前的分布...

2019-03-25 15:57:22 2029

原创 Hadoop集群环境搭建

一:置主机以下配置基于centOS71:修改主机的hostname为master修改 /etc/hostname 文件的内容为 master2: 修改网络配置1:将虚拟机的网路设置为NAT连接:2:进入系统后输入命令“vi /etc/sysconfig/network-scripts/ifcfg-ens33” (可能你的系统配置网络的文件名不叫ifcfg-ens33你可以进...

2019-03-23 23:06:07 161

原创 RocketMQ消费\生产消息的过程

这几天在看RocketMQ的知识,跟踪了下源码,弄清楚了MQ生产和消费消息的流程,这里记录下MQ消费消息的过程。1:RebalanceService线程构造PullRequest并将request放入pullRequestQueue,而PullRequest的具体信息来源于topicSubscribeInfoTable2:PullRequest放入pullRequestQueue后...

2019-03-14 12:28:07 2367

原创 集群的概念

以前经常听别人说部署集群的话至少需要3台机器,因为会存在选主的情况。但是有些项目的集群又不需3台可能两台就够了。这是为什么呢?RocketMQ的broker集群为什么可以只有两台节点?答:其实集群分不同的种类,具体的场景不同可能对集群节点数要求不同。比如RocketMQ的集群,你可以只部署两台broker,因为RocketMQ的集群中两个broker节点是对等的,并且两个节点之间不需要任何...

2019-03-13 22:54:26 2424

转载 redis的三种集群方式

原文地址:https://www.cnblogs.com/51life/p/10233340.htmlredis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发...

2019-03-13 22:08:48 694

转载 Java Socket重要参数讲解

原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/06/2314679.htmlSocket参数定义在public interface SocketOptions中TCP_NODELAYSO_BINDADDRSO_REUSEADDRSO_LINGERSO_TIMEOUTSO_SNDBUF/SO_RCVBUFSO_KEEP...

2019-03-07 14:54:06 779

原创 如何处理GC日志文件过大的情况

Handling large log files produced by long running Java Applicationshttps://bugs.java.com/bugdatabase/view_bug.do?bug_id=6941923This RFE addresses the a problem faced by long running (one or mo...

2019-03-06 15:29:53 3359

转载 Minor GC和Full GC触发条件

原文地址:https://blog.csdn.net/shi2huang/article/details/80067608在复制原文作者内容前先对Full GC条件做一个补充。执行jmap histo命令也可能会出发Full GC(Heap Inspection Initiated GC)。以及Dump堆内存也会发生GC下图的GC日志有一次Full GC,GC原因是Heap Inspe...

2019-02-20 17:04:45 14359

原创 使用NMT分析你的java进程到底用了多少内存?

我们分析java程序性能的时候可能会关注我们的进程到底用了多少内存?哪些地方分别用了多少内存呢?jdk提供了一个jcmd的命令工具可以让我们很容易地查询java进程的Native内存使用。(关于Native内存是什么读者可以参考:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.html)NMT介绍可...

2019-01-17 16:14:39 2092

原创 debug jdk的前端编译器javac

javac主要的功能是将.java文件编译成.class文件,在这个过程中包含3个主要的处理分别为,解析与填充符号表,注解处理,分析与生成字节码。今天主要介绍如何在eclipse中debug javac的源码。:1:首先我们需要下载javac的源码,我这里下载的是openJdk8u:http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/2:源...

2019-01-13 13:45:34 466

转载 How to Handle Java Finalization's Memory-Retention Issues

原文地址:http://www.devx.com/Java/Article/30192Finalization allows you to perform postmortem cleanup on Java objects, but it can delay the reclamation of resources, even if you do not use it explicitly....

2019-01-11 15:28:56 198

转载 JVM各种内存溢出是否产生dump

原文地址:https://blog.csdn.net/stevendbaguo/article/details/51366181对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=...

2019-01-10 22:05:14 739

转载 Efficient data transfer through zero copy

原文地址:https://developer.ibm.com/articles/j-zerocopy/Many Web applications serve a significant amount of static content, which amounts to reading data off of a disk and writing the exact same data bac...

2019-01-09 17:23:40 198

转载 A recap of native memory

原文地址:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.htmlThe Java heap, where every Java object is allocated, is the area of memory you're most intimately connected with when w...

2019-01-09 17:22:25 751

空空如也

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

TA关注的人

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