JVM
文章平均质量分 92
追逐消失的记忆
这个作者很懒,什么都没留下…
展开
-
java native
java中的native关键字JNI是Java Native Interface的 缩写。从Java 1.1开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计 的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作原创 2021-11-30 18:23:12 · 2073 阅读 · 0 评论 -
mat(Eclipse Memory Analyzer tool)--heap dump分析
在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那就交给memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧。MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析。下面来看看要怎么做呢,也许对你有用转载 2021-09-01 17:57:31 · 1925 阅读 · 0 评论 -
mysql insert 偶出现Deadlock死锁场景分析
有一张表A,先删除数据,如果影响行数为0,则执行INSERT插入数据。很常见的场景,在生产上也跑了很久,没有出现什么问题。但是有一次在测试环境做压测时居然出现了死锁,Deadlock found when trying to get lock; try restarting transaction因为对mysql锁不熟悉,为什么insert也会死锁,不是一般在update的时候会死锁吗? 很好奇,于是开始寻找原因…mysql锁是跟数据库设置的隔离级别有关系的,不同的隔离级别,锁也各不相同,只要是原创 2020-10-20 11:33:00 · 730 阅读 · 0 评论 -
java.util.concurrent 包 的LinkedBlockingQueue学习
LinkedBlockingQueue是一个用于并发环境下的阻塞队列集合类,它可以用于生产-消费者模型。阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\处理方式 抛出异常原创 2020-09-10 16:48:58 · 1058 阅读 · 0 评论 -
Thread的run()与start()的区别
1、start()、run()方法的定义区分start(): 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。然后CPU再调度其它线程。 一旦得到cpu时间片,就开始执行r...原创 2020-09-07 17:47:19 · 8333 阅读 · 0 评论 -
Java 中关于Native关键字的解释
关于JNI 概念首先要讲一下JNI。Java很好,使用的人很多、应用极 广,但是Java不是完美的。Java的不足体现在运行速度要比传统的C++慢上许多之外,还有Java无法直接访问到操作系统底层如硬件系统,为此 Java提供了JNI来实现对于底层的访问。JNI,Java Native Interface,它是Java的SDK一部分,JNI允许Java代码使用以其他语言编写的代码和代码库,本地程序中的函数也可以调用Java层的函 数,即JNI实现了Java和本地代码间的双向交互。Native 解释:原创 2020-09-04 11:16:35 · 217 阅读 · 0 评论 -
Java SPI思想梳理
一、简介SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻zhao服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。为什么要使用spi面转载 2020-07-27 14:12:11 · 305 阅读 · 0 评论 -
为什么SpringBoot中main方法执行完毕后程序不会直接退出
针对这个问题我们可以转化一下思路:一个JVM进程,在什么情况下会正常退出?大部分人应该都知道使用System.exit()或Runtime.exit()可以直接导致当前JVM进程退出,但是仔细想想这个好像跟SpringBoot没啥关系哈另外一个可能会导致进程退出的是所有的非daemon进程完全终止,那么根据这个条件反推的话是不是说只要保证SpringBoot进程中包含1个以上的daemon进程就可以保证程序不会退出接下来我们去看下SpringBoot是如何基于这个特性实现的我们以Spring原创 2020-07-24 16:21:37 · 5069 阅读 · 1 评论 -
jdk源码解析 Object超类里面的wait()和notify()底层实现
Object.wait/notify(All)大家都知道主要是协同线程处理的,大家用得也很多,大概逻辑和下面的用法差不多package com.wangyong.learn.project.spring;public class StartSpringContextKeepActveStatus { public static void main(String[] args) { final Object resrouce = StartSpringContextKeep原创 2020-07-24 16:15:53 · 1901 阅读 · 0 评论 -
Java 动态字节码操作
运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改 新的属性/方法)java常见的字节码操作类库BCEL Byte Code Engineering Library (BCEL) ,这是 Apache Software Foundation 的 Jakarta 项目的一部分。 BCEL 是 Java classworking 广泛 使用的一种 框架 , 它 可以让您深入 JVM 汇编语言进行类操作的细节。 BCEL 与 Java...转载 2020-06-30 15:23:38 · 380 阅读 · 0 评论 -
ThreadLocal
在阅读Handler源码时发现了这么一个东西,本想直混在其他博客中一笔带过,但仔细想了下这个东西还是蛮重要的,于是开了这篇博客。ThreadLocalthreadlocal使用方法很简单static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>();sThreadLocal.set()sThreadLocal.get()threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据转载 2020-05-13 17:53:49 · 122 阅读 · 0 评论 -
java -D简介
很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty("")方法。这个方法需要配置JVM系统属性,那么如何配置呢?那就是使用java -D 配置系统属性。使用格式是:java -Dkey=value比如新建一个测试类,如下:public class Test { public static void main(String[] args){...转载 2020-04-14 14:06:03 · 10407 阅读 · 0 评论 -
Java运行参数设置
1.概述Java支持的运行参数包括如下几种:标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;2. 标准参数标准参数又可以分为如下几种:运行模式相关的,如-serv...转载 2019-09-10 11:40:22 · 476 阅读 · 0 评论 -
tomcat 应用服务启动cpu过高
参考资料:https://my.oschina.net/7001/blog/1504798?nocache=15160103157751、Linux环境下可以使用top指令查看系统进程占用情况2、top -Hp pid(例23399)可以查看进程的线程运行情况3、jstack 23399|grep -A 10 5d13 (5d13 为线程id的16进制)查看一个进程里面的线程...原创 2019-01-07 17:15:42 · 5304 阅读 · 1 评论 -
jvisualvm 远程监控服务器tomcat运行堆栈信息
1、在jvisualvm中进行远程配置,具体如下:添加一个远程主机2、鼠标右击远程主机添加JMX3、添加JMX配置选项(需要远程主机开发一个端口提供外部监控访问)4、配置服务器tomcat开发端口运行jmx监控堆栈信息Tomcat远程监控 在tomcat/bin/catalina.sh加入以下配置:(配置prot开发端口、-Djava.rmi.server.host...原创 2019-01-09 10:34:33 · 713 阅读 · 0 评论 -
String 在内存中的操作变化
String使用+进行拼接时的变化 public class StringCompare { public static void main(String []args){ String n1 = "123"; String n2 = "1234"; n1 = n1 +"4"; System.out.println...原创 2019-02-18 11:56:49 · 843 阅读 · 0 评论 -
内存泄漏引发对jvm内存的深入了解
参考:https://blog.csdn.net/qq_34337272/article/details/82177383问题答案在文中都有提到 如何判断对象是否死亡(两种方法)。 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收...转载 2019-03-01 13:24:10 · 508 阅读 · 0 评论 -
intellij idea 配置运行参数
1、找到intellij的运行配置项2、配置运行的jvm参数3、配置好后右击要运行的main文件4、运行结果后sampling ...include patterns:com\.youx\.qd\.app\.user\.utils\..*exclude patterns:Heap PSYoungGen total 37888K, used 9261...原创 2019-03-01 15:46:37 · 8462 阅读 · 0 评论 -
通过对Java 的GC机制的了解,指导业务开发及系统调优
JVM GC(垃圾回收机制)在学习Java GC之前,我们需要记住一个单词:stop-the-world。它会出现在任何一种GC算法中。stop-the-world意味着JVM因为需要执行GC而停止了应用程序的执行。当stop-the-world发生时,除GC所需的线程外,所有的线程都进入等待的状态,直到GC任务完成。GC优化很多时候就是减少stop-the-world的发生。J...转载 2019-05-16 15:12:59 · 197 阅读 · 0 评论 -
浅谈synchronized
synchronized关键字最主要有以下3种应用方式,下面分别介绍 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。1、修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁p...原创 2019-05-22 19:49:56 · 245 阅读 · 0 评论 -
Java并发包源码分析
并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力。如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善。现代的PC都有多个CPU或一个CPU中有多个核,是否能合理运用多核的能力将成为一个大规模应用程序的关键。 Java基础部分知识总结点击Java并发基础总结。Java多线程相关类的实现都在Java的并发包concurrent,concurr...转载 2019-07-11 14:06:02 · 132 阅读 · 0 评论 -
Java主线程与线程池的任务同步机制
在Java中多线程实现的方式有三种,分别为1、继承Thread类型实现多线程的业务方法,2、实现Runnable接口服务重写run()方法实现多线程的业务3、实现Callable接口重写run()方法实现多线程的业务而主线程和子线程的同步策略有两种方式:1、通过主线程在启用子线程的时候,我们给子线程一个指定的信号量,标志当前子线程的处理状态,而主线程通过定时的访问该信号量判断子...原创 2019-08-26 16:05:01 · 1471 阅读 · 0 评论 -
tomcat服务启动后稍有流量cpu疯狂飙高艰辛排查历程
1、cpu疯狂的手段:1.1、使用jmap指令分享jvm的堆运行情况,看实例了多少个对象 jmap -histo 11472|grep youx|sort -k 2 -g -r|lessyoux : 代表实例对象含有包名(框内代表实例化个数)1.2、查看高频使用cpu的线程队列情况 jstack 15543 |grep 3cfc -A 1001.3、再实用 j...原创 2019-01-10 17:06:30 · 2301 阅读 · 0 评论