未来币nxt 启动分析(1)
window安装后桌面图标'Nxt Server' 执行nxt.exe。或者直接运行nxt.bat也可以,启动类nxt.Nxt.java
1,静态属性初始化
private static volatile Time time = new Time.EpochTime();
将当前时间转化为以未来币纪元开始时间计时(Constants.EPOCH_BEGINNING=2013.11.24 12:00:00)
(int)((System.currentTimeMillis() - Constants.EPOCH_BEGINNING + 500) / 1000);
单位秒
2, 静态快初始化
static {
redirectSystemStreams("out");
redirectSystemStreams("err");
System.out.println("Initializing Nxt server version " + Nxt.VERSION);
printCommandLineArguments();
runtimeMode = RuntimeEnvironment.getRuntimeMode();
System.out.printf("Runtime mode %s\n", runtimeMode.getClass().getName());
dirProvider = RuntimeEnvironment.getDirProvider();
System.out.println("User home folder " + dirProvider.getUserHomeDir());
loadProperties(defaultProperties, NXT_DEFAULT_PROPERTIES, true);
if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {
throw new RuntimeException("Using an nxt-default.properties file from a version other than " + VERSION + " is not supported!!!");
}
}
2.1读取系统日志输出配置属性。将System.out.out/error写入到文件
PersonalOptions=-server -Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true
private static void redirectSystemStreams(String streamName) {
//安装时会写入到系统
String isStandardRedirect = System.getProperty("nxt.redirect.system." + streamName);
。。。
System.setOut(new PrintStream(new PrintStream(Files.newOutputStream(Files.createTempFile("nxt.system.out.", ".log")))));
}
2.2打印命令行参数
printCommandLineArguments
就是打印-Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true
2.3 获取运行模式
runtimeMode = RuntimeEnvironment.getRuntimeMode()
window运行模式为desktop(nxt.runtime.mode=desktop) nxt.env.DesktopMode
2.4 获取工作目录
dirProvider = RuntimeEnvironment.getDirProvider()
如果系统没有指定工作目录,桌面模式下windows系统是用WindowsUserDirProvider
Paths.get(System.getProperty("user.home"), "AppData", "Roaming", "NXT").toString();
创建工作目录
C:\Users\zzy\AppData\Roaming\Nxt\
相关的数据都放在这,包括:启动配置、日志、区块链数据
2.5 载入配置属性
loadProperties(defaultProperties, nxt-default.properties, true);
将conf目录下的nxt-default.properties读取到Properties.(run.bat会将conf/下的此文件加入classpath)
2.6 代码版本与配置版本判断
if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {
2.7 第二个静态块初始化
private static final Properties properties = new Properties(defaultProperties);
使用nxt-default.properties的值作为初始化值,nxt.properties的值覆盖nxt-default.properties
static {
loadProperties(properties, NXT_PROPERTIES, false);
}
从工作目录(windows C:\Users\zzy\AppData\Roaming\Nxt\conf\)读取nxt.properties
如果没有此文件 则创建个空的。
3,执行main方法
public static void main(String[] args) {
try {
Runtime.getRuntime().addShutdownHook(new Thread(Nxt::shutdown));
init();
} catch (Throwable t) {
System.out.println("Fatal error: " + t.toString());
t.printStackTrace();
}
}
public static void init() {
Init.init();
}
指向内部Init的静态块初始化。
未来币nxt 启动分析(1)相关推荐
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 )
文章目录 一. Launcher 应用 startActivitySafely 方法分析 二. Launcher 中的 startActivity(View v, Intent intent, Obj ...
- springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器
springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...
- 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT
全志H3启动分析,移植主线UBOOT 参考资源 启动流程 因为使用的是外扩SD卡,因此主要参考了这部分内容:Bootable SD card SD卡Layout如下: start sector siz ...
- STM8启动分析及IAP
STM8启动分析及IAP 转载于:https://www.cnblogs.com/LittleTiger/p/5535041.html
- ADS中startup.s文件启动分析
映像文件分析,ADS 中startup.s 文件启动分析,学嵌入式开发ADS 必看 2010-04-17 10:21 声明: 我也是转来的,不是原创,由于别人是网易的日志,不能直接转,所以-- 感谢原 ...
- 数据分析行业的发展前景怎么样? 未来关于十年数据分析行业的5种预测
也许未来十年会发生什么,我们很难有一个精确的描述,但我们却能通过一些数据和一些技术手段,了解未来十年的发展趋势. 回顾过去,从90年代起,技术领域变革都深深地影响了我们普通人的生活,数据引领并推动着世 ...
- 2022版u-boot启动分析笔记之一(start.S与lowlevel_init.S)
u-boot-2022.01-rc4启动分析笔记之一(start.S与lowlevel_init.S U-Boot启动过程概述 从链接脚本u-boot.lds说起 start.S start.S从re ...
- Uboot启动分析--start.S启动分析(1)
总目录 NXP i.MX8M secure boot流程 Uboot链接脚本分析述 Uboot启动分析–start.S启动分析(1) Uboot启动分析–start.S启动分析(2) Uboot启动分 ...
- BSP板机支持包、linux启动分析、ARM裸机编程
文章目录 一.BSP 二.驱动 驱动的基本要素 三.启动分析 1.uboot 2.uboot的作用 3.uboot相关命令 关键的内容: 1)bootargs,启动参数 2)启动命令 3)修改启动延时 ...
最新文章
- 使用 acl 库编写发送邮件的客户端程序
- 为什么深度神经网络这么难训练?| 赠书
- bool转nsnumber ios_iOS 的 NSNumber(对基本数据类型) NSValue(对结构体) 的装箱
- mysql搜索规则_MySQL基于规则优化
- Test Report
- STL:大小写字母转换、字符转数字、char*转string(未完待续)
- IROS 2017上,这些厂商将会给我们展示什么样的黑科技?
- jdbc mysql驱动_MySQL JDBC驱动程序如何处理准备好的语句
- MYSQL--浅析索引
- 综合演练 对象数组 对象的方法 我们9203班 0912
- 交换排序—冒泡排序(Bubble Sort)
- 计算机安全性分析建模,计算机网络安全性分析建模研究
- c语言米粒数实验报告,《單片机C程序设计》实验报告.doc
- 服务器信号满格但网速很慢,信号满格网速太慢是什么原因,网速慢是什么原因-...
- mybatis xml 格式化时间查询
- 华为4月11号 南研所 面经。(已拿offer)
- oracle 6i,Oracle Reports 6i培训教程.doc
- 塑形管理小程序开发(一)-源头追溯
- 力扣解题思路:位运算系列
- 电子科技大学图论期末复习重点(杨春老师强调+往年期末卷子总结)