TimYang在博文《降低应用latency方法谈》
中提到对Java方法进行Profiling,在某些场景更倾向于采用纯Java工具类的方法,比如通过给进程发Signals来实现,以求动态地打开或关闭Profiler。
感觉这个思路不错,以下是一个大致实例:
SignalTest.java
/**
*
*/
package signal;
import java.util.Observable;
import java.util.Observer;
import sun.misc.Signal;
import sun.misc.SignalHandler;
/**
* @author xuanyin
*
*/
public class SignalTest implements Observer {
/**
* @param args
*/
public static void main(String[] args) {
new SignalTest().go();
}
private void go() {
try {
HandlerTest sh = new HandlerTest();
sh.addObserver(this);
sh.handleSignal("HUP");
sh.handleSignal("BUS");
System.out.println("Sleeping for 60 seconds: hit me with signals!");
Thread.sleep(60000);
} catch (Throwable x) {
x.printStackTrace();
}
}
/**
*
*/
@Override
public void update(Observable arg0, Object arg1) {
System.out.println("Received signal: " + arg1);
}
/**
* HandlerTest Class
*/
class HandlerTest extends Observable implements SignalHandler {
@Override
public void handle(Signal signal) {
setChanged();
notifyObservers(signal);
}
/**
*
* @param signalName
* @throws IllegalArgumentException
*/
public void handleSignal(String signalName) throws IllegalArgumentException {
try {
Signal.handle(new Signal(signalName), this);
} catch (IllegalArgumentException x) {
throw x;
} catch (Throwable x) {
throw new IllegalArgumentException("Signal unsupported: "+signalName, x);
}
}
}
}
首先运行执行上述程序,然后查看其系统进程号。
如,若是4089,则在终端中执行kill -s BUS 4089
Java程序输出:Received signal: SIGBUS
信号具有平台相关性,不同平台下能使用的信号种类是有差异的。
Linux下支持的信号:
SEGV, ILL, FPE, BUS, SYS, CPU, FSZ, ABRT, INT, TERM, HUP, USR1, USR2, QUIT, BREAK, TRAP, PIPE
Windows下支持的信号:
SEGV, ILL, FPE, ABRT, INT, TERM, BREAK
不足之处欢迎大家留言指正:)
分享到:
相关推荐
Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...
《jbpm实例开发详解》 jbPM,全称Java Business Process Management,是一款开源的工作流管理系统,主要用于业务流程的建模、部署和管理。本篇将围绕jbPM实例开发,通过实例来解析其基本概念、流程设计和执行管理,...
在数字信号处理(Digital Signal Processing, DSP)中,信号被转换为数字形式,并使用计算机算法进行分析和处理。本入门教材系统地介绍了数字信号处理的基础概念和方法论,不要求读者具有广泛的数学背景。本书的作者...
为了链接到现有的Signal-Android / signal-cli实例,signal-cli使用了 ,因为libsignal-service-java尚不支持将其。 要进行注册,您需要一个电话号码,您可以在其中接收SMS或来电。 signal-cli主要用于在服务器上...
10. **应用实例**:Java数字信号处理技术被广泛应用于通信系统(如无线通信和卫星通信)、音频和视频编码、医疗成像、雷达和遥感、地震数据分析等领域。 通过学习和实践Java数字信号处理,开发者能够掌握信号处理的...
Qt5开发及实例,实例CH205,功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。 介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容—信号和槽机制(Signal & ...
此实现不使用本机 C curve25519-donna,仅依赖于 Signal 的纯 Java 代码。因此,就动态曲线提供程序而言,这是 Signal curve25519-java的降级版本。 获取实例 调用者初始化 Curve25519 的单例实例。
如果我们想要在 enum 中添加新的方法,那么必须在 enum 实例序列的最后添加一个分号。例如: ```java public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4); // 成员变量...
在"TestSS.jar"这个文件中,很可能包含了一个实现了信号/槽机制的Java应用实例。我们可以推测这个程序可能包含以下几个关键部分: 1. **信号类(Signal Class)**:这是用于定义和发射信号的类,它可能会包含一些...
- 使用Condition接口提供的await()、signal()和signalAll()方法在java.util.concurrent.locks包中的实现类也可以实现线程间的通信。 10. Java中的并发集合类有哪些? - java.util.concurrent包中提供了一些线程...
Java 枚举(enum)是Java 1.5 引入的一种新的数据类型,它用于表示一组相关的值,这些值可以被当作常量来使用。枚举类型比传统的静态常量更加安全,可读性更好,并且允许进行更丰富的定制。下面我们将详细探讨Java ...
而且 Java 要求必须先定义 enum 实例。例如: ```java public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; ...
Java的`Lock`接口提供了条件变量,如`await()`和`signal()`方法,用于线程间的通信和协作。 5. **事件驱动编程**:电梯模拟器通常基于事件驱动模型,如电梯到达楼层、乘客按下按钮等。你可以使用观察者模式...
Java 使用 Condition 控制线程通信的方法实例详解 Java 中,Condition 类是 Lock 接口的一个补充,它提供了一种机制来让线程等待某个条件的满足,然后继续执行。Condition 将同步监视锁方法(wait、notify 和 ...
《jBPM实例开发详解》 jBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,用于设计、执行和管理业务流程。本文将深入探讨如何使用jBPM进行实例开发,包括创建基本流程、使用API管理和...
### Java 枚举类总结 #### 一、概述与基本概念 枚举类型(`enum`)是Java中的一种特殊类,它允许开发者定义一组命名的常量,并将其视为一个独立的类型。从JDK 1.5版本开始,Java引入了枚举类型,它提供了一种更加...
await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...
以下是对Java `enum`的详细用法和实例代码的深入解析。 **用法一:常量的定义和使用** 在Java 1.5之前,我们通常使用`public static final`关键字来定义常量。但自从引入`enum`后,我们可以将相关常量组织到一个...
每个事件只需要一个Signal实例,不需要额外的常量或子类。 事件侦听器直接注册到信号,而无需事件管理器和事件类型的基于字符串的表示。 接口允许在需要时轻松封装信号功能。 Java Signal的API是一个事件模型,可以...
本书"fundamental of statistical signal processing estimation theory"深入浅出地介绍了这些概念,并可能包含了大量的实例和算法实现,对于Java程序员来说,了解并掌握这些知识,不仅可以提升对数据的理解和处理...