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
不足之处欢迎大家留言指正:)
分享到:
相关推荐
为了链接到现有的Signal-Android / signal-cli实例,signal-cli使用了 ,因为libsignal-service-java尚不支持将其。 要进行注册,您需要一个电话号码,您可以在其中接收SMS或来电。 signal-cli主要用于在服务器上...
Qt5开发及实例,实例CH205,功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。 介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容—信号和槽机制(Signal & ...
此实现不使用本机 C curve25519-donna,仅依赖于 Signal 的纯 Java 代码。因此,就动态曲线提供程序而言,这是 Signal curve25519-java的降级版本。 获取实例 调用者初始化 Curve25519 的单例实例。
每个事件只需要一个Signal实例,不需要额外的常量或子类。 事件侦听器直接注册到信号,而无需事件管理器和事件类型的基于字符串的表示。 接口允许在需要时轻松封装信号功能。 Java Signal的API是一个事件模型,可以...
实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19...
在本篇文章里小编给大家整理了一篇关于java自定义jar包让jmeter使用的方法以及实例代码,需要的朋友们参考下。
而且 Java 要求必须先定义 enum实例。 public enum Color { RED("红色" , 1 ), GREEN( "绿色" , 2 ), BLANK( "白色" , 3 ), YELLO( "黄色" , 4 ); // 成员变量 private String name; private int index; ...
//根据流程定义创建流程实例 ProcessInstance pi=pd.createProcessInstance(); jc.close(); } public void testrun(){ //得到流程定义(在数据库) JbpmConfiguration jbpmConfiguration=...
一个Task instance(任务实例)可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以通过一个与用户关联的...
2-1-5 数字信号处理器(Digital Signal Process-DSP) 2-1-6 超长指令集微处理器(VLIW) 2-2 SoC嵌入式系统微处理器 2-2-1 什么是SoC嵌入式系统微处理器 2-2-2 SoC微处理器的设计开发 2-2-3 RISC结合DSP的SoC...
279 4-3-3 MIDP开发环境 282 4-3-4 MIDP开发实例 290 4-3-5 MIDP 的移植 294 4-3-6 小结 296 4-4 Symbian Java Phone 297 4-4-1 Java Phone架构 297 4-4-2 JTAPI 300 4-4-3 应用实例 ...
He has published widely on digital libraries, machine learning, text compression, hypertext, speech synthesis and signal processing, and computer typography. He has written several books, the latest ...
目录.................................................................................................................................2 内容提要...........................................................