JAVA
文章平均质量分 63
E_k_in
这个作者很懒,什么都没留下…
展开
-
编译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 · 959 阅读 · 0 评论 -
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 · 375 阅读 · 0 评论 -
如何优化系统-Amdahl(阿姆达尔)定律
系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例我们要优化系统应该先定位系统的瓶颈在哪里?哪里的优化价值最大,并且优化难度最小。Amdahl定律简而言之就是首先优化优化价值最大并且难度最小的点。我们假设一个系统分3部分:网络,应用程序,I/O。下面是系统的时间线:|-------------网络(60%)-------------|–应用程序(10%)–|------I/O(30%)-----|如果我们能对网络优化50%,那么对整个系统原创 2021-06-15 11:25:02 · 338 阅读 · 0 评论 -
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 · 103 阅读 · 0 评论 -
复现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 · 467 阅读 · 0 评论 -
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 · 139 阅读 · 0 评论 -
OutOfMemoryError会不会导致JAVA进程崩溃?
java抛出OutOfMemoryError异常会不会导致进程崩溃?分两种情况:一种是系统内存真的被耗尽了,系统的OOM killer 会杀掉进程。一种是jvm 或者jdk逻辑上的OutOfMemoryError。比如jdk 中ByteBuffer 申请DirectByteBuffer的时候如果此时系统的直接存储已经超过了 -XX:MaxDirectMemorySize 设置的上限,只是简单的抛出OutOfMemoryError异常。...原创 2021-05-13 19:35:43 · 1218 阅读 · 0 评论 -
遇到一个 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 · 180 阅读 · 0 评论 -
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 · 147 阅读 · 0 评论 -
WatchService = Inotify + poll
why poll not epoll. because epoll hashigher overhead原创 2021-04-09 10:08:39 · 365 阅读 · 0 评论 -
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 · 190 阅读 · 0 评论 -
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 · 197 阅读 · 0 评论 -
jvm:ObjectMonitor源码
synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享变量的修改能够及时可见(3)有序性:有效解决重排序问题,其用法也有三个: 修饰实例方法修饰静态方法修饰代码块 修饰实例方法 public class Thread1 implements Runn...转载 2020-11-26 14:32:40 · 412 阅读 · 0 评论 -
stack guard page for java
jvm 在创建thread的时候会create_stack_guard_pages()来保护我们的线程栈不能超过指定的大小,如果不对栈做限制的话,一旦其超过了为其分配的大小后,将会覆盖后面内存的数据将会产生意想不到的结果,所以jvm使用了stack_guard_pages来做限制。看图吧:...原创 2020-10-31 10:49:26 · 639 阅读 · 0 评论 -
如何在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 · 249 阅读 · 0 评论 -
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 · 438 阅读 · 0 评论 -
如何调试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 · 293 阅读 · 0 评论 -
-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 · 8601 阅读 · 0 评论 -
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 · 291 阅读 · 0 评论 -
java 多线程-实例数据交换器 Exchanger
实例数据交换器用于在两个线程之间,相同类型的实例数据交互。比如讲线程A中的一个People实例的数据传递给线程B的一个People实例,public class Test{ public static void main(String[] arg){ Exchanger ex = new Exchanger<>(); Runnable taskA = ()->{ Pe原创 2017-12-05 20:20:05 · 287 阅读 · 0 评论 -
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 · 226 阅读 · 0 评论 -
JVM各种内存溢出是否产生dump
原文地址:https://blog.csdn.net/stevendbaguo/article/details/51366181对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=...转载 2019-01-10 22:05:14 · 801 阅读 · 0 评论 -
在Eclipse中debug时,查看类加载信息
原文地址:https://blog.csdn.net/w_intercool/article/details/7304010在跑程序时,有些时候会发现NoSuchMethodException,出现这种情况很大情况都是包冲突导致的为了查看程序在运行时加载了哪里包,我们可以在调试程序加一些启动参数如: -verbose就可以查看所加载的类设置过程如下:运程程序之后就会有类...转载 2018-10-16 16:30:03 · 1223 阅读 · 0 评论 -
Spring-test + mockito + junit +cobertura 以及Spring-test + powermock+ junit遇到的坑
最近在研究单元测试,先是搭建了Spring-test + mockito + junit的环境,但是由于发现项目中需要有mock静态方法的地方,于是研究了下Spring-test + powermock+ junit后者我研究了三天踩过无数坑,最终还是放弃了。mockito团队也是建议不要对静态方法进行mock,当然他们也没有实现静态方法的mock。Spring-test + powermoc...原创 2018-10-16 10:47:23 · 1198 阅读 · 0 评论 -
CentOs7时区更新遇到的坑
最近服务上线,系统用的CentOs7,服务启动成功,但是看日志时间不对。然后把系统的时区改了。再看日志有些服务的日志时间正常了。但是有些服务的时间还是不对。一样的环境,一样的日志框架,服务不同日志显示的时间不同。网上各种找资料,都没法。最后想到改了时区,没有重启服务可能有些服务的时区信息并没有更新。最后重启了所有服务,日志显示的时间就正常了。。。...原创 2018-08-31 18:06:50 · 867 阅读 · 0 评论 -
Java自带的GUI性能监控工具Jconsole以及JisualVM简介
原文链接:http://blog.csdn.net/chendc201/article/details/229055031 Jconsole1.1 简介以及连接 JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具。下面以对tomcat的监控为例,带领大家熟悉Jconsole这个工具。 Step 1,在dos/bash命令下输入:jcons...转载 2018-06-29 13:53:18 · 339 阅读 · 0 评论 -
使用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 · 2134 阅读 · 0 评论 -
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 · 513 阅读 · 0 评论 -
JVM的Heap Memory和Native Memory
原文地址:https://blog.csdn.net/u013721793/article/details/51204001JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此...转载 2019-01-09 15:18:36 · 332 阅读 · 0 评论 -
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 · 847 阅读 · 0 评论 -
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 · 14526 阅读 · 0 评论 -
JvisualVM分分析CPU波动较大的问题
今天遇到一个问题,在压力测试的时候CPU波动很大。采用JvisualVM工具进行分析。1:先打开JvisualVM2:找到对应的应用进程并双击,然后进入Sampler,在CPU波动的时候点击CPU对CPU进行抽样。注意线上环境千万不要使用Sampler右边的Profiler.3:抽样进行一段时间后(建议3分钟左右就行了,时间越长生成的snapshot越大),点击”stop”,然...原创 2019-08-13 16:41:48 · 1705 阅读 · 0 评论 -
使用jvisualvm定位Full GC频繁的问题
今天性能测试的时候出现一个问题,接口响应时间太长达到了2s。使用JvisualVM定位问题。1:先打开JvisualVM2:找到对应的应用进程(如果需要定位远程应用环境需要远程连接远程)并双击,然后进入Monitor看看CPU和堆内存是否正常,观察发现CPU正常,但是堆内存GC频繁。然后进入 Visual GC查看,发现堆内存Full GC非常频繁,并且Full GC Old区回收的内...原创 2019-08-13 16:43:40 · 2895 阅读 · 0 评论 -
maven打jar包指定要编译的资源文件很重要
最近在使用dubbo的时候遇到一个问题,在加载自定义扩展的Filter的时候,报错:No such Filter found in ... 大致意思就是说没有找到Filter对应的类com.cn.xxxFilter。并且这个错误只有在测试环境发生,开发环境并没有这个错误。刚开始以为是不是com.cn.xxxFilter.java没有被编译为class。后来查看测试环境打的jar包,发现有com.c...原创 2018-04-19 22:37:55 · 2243 阅读 · 1 评论 -
使用JIBX实现POJO与xml的相互转换
最近在研究netty,在学习HTTP+XML协议栈开发这个知识点时,需要对POJO-xml进行互相转换,《netty权威指南第二版》简易使用jibx框架来实现POJO-XML的相互转换,下面讲讲具体的实现过程。1:首先去JIBX的官网下载jibx的zip包(注意:jibx_1_2_x在jdk1.8的环境下会出错,jdk1.8建议下载jibx_1_3_x)2:下载zip包后解压出来将解压出来的文件夹...原创 2018-04-07 13:19:06 · 1379 阅读 · 0 评论 -
基于Netty实现的简易服务端与客户端的信息交流
1:服务器端所需要的三个类如下:public class TimeServer { public static void main(String[] agrs) { new TimeServer().bind(8080); } private void bind(int port) { EventLoopGroup bossGroup = new NioEventLoopGrou...原创 2018-04-02 22:05:21 · 207 阅读 · 0 评论 -
服务端通过生成字节码返回客服端解析为图像
在之前做项目的时候遇到过这样的情况,用户需要上传自己的头像图片,为了能在下次登录时展示这个图片,我们会把图片保存到项目中的某一个指定的文件夹里面,以便服务程序能访问到这张图片。(因为这个图片必须放到tomcat容器里面(webapps文件夹下面)能访问到的地方,程序才能访问到)。但是有一个问题是,这不利于程序包的更新,每次发布war包,tomcat将会解析出新的项目文件夹,原有的项目文件夹将会被替原创 2018-01-13 16:26:05 · 311 阅读 · 0 评论 -
ScheduledExecutorService 预定执行任务
预定执行任务的用法。public class Test{ public static void main(String[] a){ ScheduledExecutorService s = new ScheduledThreadPoolExecutor(3); Runnable task = new Runnable() { @Override public vo原创 2018-01-13 15:19:01 · 185 阅读 · 0 评论 -
ThreadPoolExecutor的四个拒绝策略
下面是建立一个线程池的基本语法,最后一个参数是线程池的拒绝策略。Jdk默认实现了4个拒绝策略。在下面四张图片中可以看到。ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 6, 3000, TimeUnit.MILLISECONDS, new LinkedBlockingDeque(), new T原创 2018-01-13 15:18:48 · 2137 阅读 · 0 评论 -
Collections.synchronizedXXX 集合同步
Collections.synchronizedCollection(Collectiont)Collections.synchronizedList(Listlist)Collections.synchronizedMap(Mapmap)Collections.synchronizedSet(Set t)上面几个方法是Collections工具类将集合变为多线程安全集合的主要原创 2018-01-13 14:44:35 · 998 阅读 · 0 评论