java jvm目录,JVM(Java虚拟机)中过程工作目录讲解

JVM(Java虚拟机)中进程工作目录讲解

每次我们用Java命令运行我们的Java程序,都会在JVM中开启一个进程,对于每一个进程,都会有一个相对应的工作目录,这个工作目录在虚拟机初始化的时候就已经设置好了,默认的情况下,工作目录是我们工程的根目录,比如:

/home/test/Project-

--bin

--divinemind.onlyfun.test.helloworld.java

--src

假如我们在用下面的命令启动helloworld,那么这个进程的根目录就是/home/test/Project/bin,helloworld里进行操作需要的资源,比如文件什么的,都会在这个目录进行查找。

在Windows下,情况也是相同的。我们可以通过System.getProperty(“user.dir”);取得当前进程的工作目录,而且当我们想改变这个工作目录的时候,也可以通过System.setProperty(“user.dir”,”/home/test/xxxxxxx”);设置当前进程的工作目录,但是,事实上,user.dir这个系统环境是不可以重新设置的,问题很多,最常见的问题,当前进程下的所有线程都在使用这个环境变量,如果修改的话,危险可想而知,Sun的JDK这样做估计是一个小BUG.所以,System.setProperty这个方法只是让我们看看,实际上没有作用。在Sun的JDK1.4中,当前进程的工作目录是没有办法修改的,在JDK1.5中,ProcessBuilder在这方面有所改进。

当我们没有选择需要使用非工作目录下的资源的时候,比如:Java调用A, A使用B,B和A在同一个目录下,A和B不在当前进程的工作目录下,这样的话,程序肯定运行会有问题,这个时候有两个办法可以解决

1. 所有的路径都写绝对路径

所有的路径写绝对路径可以实现,但是程序在部署的时候麻烦非常多,维护也困难,但是方法简单,直观。

2. 在当前进程中新开一个子进程,修改子进程的工作目录

在Java中新开一个子进程的方法跟JDK版本有关:

A.JDK1.4中:

Process process = System.getRuntime.exec(arg1,arg2,arg3);

arg1:系统命令

arg2:命令运行的环境变量

arg3:子进程的工作目录,在这个地方就可以设置我们自己想要的工作目录,达到使用非父进程工作目下资源的方法。

B.JDK1.5中:

在这个版本中,我们可以使用ProcessBuilder来新开一个JVM进程。

下面的代码可以实现这里我们的功能:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");

// myDir就是当前进程的工作目录,如果不设置,那就是默认为父进程的工作//目录

pb.directory("myDir");

Process p = pb.start();

Java在平时跟操作系统的关系确实很少,我们都很少碰到问题,但是如果我们调用操作系统命令什么的时候,麻烦就多起来了,不过如果我们更多地了解JVM,问题就是比较容易解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript 第七天 笔记

通过三天把以前学习的内容复习一下。以便继续学习。 BOM模型 BOM浏览器对象模型 DOM ----> document BOM -----> window Document对象其实是window的一个属性或叫子对象 Window对象的子对象介绍 Window.navigator : 表示浏览器的相关信息 Window.history : 历史记录,或者…

LeetCode MySQL 618. 学生地理信息报告(row_number)

文章目录1. 题目2. 解题1. 题目 一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 student 表中。 | name | continent | |--------|-----------| | Jack | America | | Pascal | Europe | | Xi | Asia | | Jane | Americ…

java非必填字段跳过校验,avalon2表单验证,非必填字段在不填写的时候不能通过验证...

avalon2表单验证,非必填字段在不填写的时候不能通过验证代码var vm avalon.define({$id: "validate1",aaa : "",validate: {onError: function(reasons) {reasons.forEach(function(reason) {console.log(reason.getMessage())})},onValidateAll: functio…

jQuery心得5--jQuery深入了解串讲1

1.CSS-DOM 操作 获取和设置元素的样式属性: css()。 获取和设置元素透明度: opacity 属性(css 的一个属性)。 获取和设置元素高度, 宽度: height(), width(). 在设置值时, 若只传递数字, 则默认单位是 px. 如需要使用其他单位则需传递一个字符串, 例如 $(“p:first”).height(“…

LeetCode MySQL 1225. 报告系统状态的连续日期(date_sub + over)

文章目录1. 题目2. 解题1. 题目 Table: Failed ----------------------- | Column Name | Type | ----------------------- | fail_date | date | ----------------------- 该表主键为 fail_date。 该表包含失败任务的天数.Table: Succeeded --------------------…

mysql tableveiw与表格,javafx将数据库内容输出到tableview表格

一 、创建Fxml文件,用Javafx Scene Builder 编辑页面,创建tableview(表格)和tablecolum(表格中的列),并为其设置fxid;二、生成fxml文件的控制类;三、创建数据库的连接类(使用JDBC驱动);Connect.javaimportj…

UVa 11636 Hello World!

#include<cstdio>#include<cmath>using namespace std;int main(){int n,T1;while(scanf("%d",&n),n>0){printf("Case %d: %d\n",T,(int)ceil(log10(n)/log10(2))); //换底公式}return 0;}转载于:https://www.cnblogs.com/LtRoycePhan…

php mysqliquery 返回值,PHP mysqli_multi_query() 函数_程序员人生

实例执行多个针对数据库的查询&#xff1a;$conmysqli_connect("localhost","my_user","my_password","my_db");// Check connectionif (mysqli_connect_errno($con)){echo "Failed to connect to MySQL: " . mysqli_connec…

LeetCode MySQL 1369. 获取最近第二次的活动(over窗口函数)

文章目录1. 题目2. 解题1. 题目 表: UserActivity ------------------------ | Column Name | Type | ------------------------ | username | varchar | | activity | varchar | | startDate | Date | | endDate | Date | -----------------…

侧边导航栏的实现

F:\java\c侧边栏\侧边菜单栏\MySlidingMenu转载于:https://www.cnblogs.com/ct732003684/archive/2013/03/24/2979416.html

签到 数据库php,php与数据库的连接用法 (签到一)

注册页面//插入js验证window.onload function(){var hid document.getElementById("id");if(hid.value !""){ //当用户名已存在数据库时&#xff0c;提示用户已注册alert("用户名已注册");}}//ht…

LeetCode MySQL 569. 员工薪水中位数(over窗口函数)

文章目录1. 题目2. 解题1. 题目 Employee 表包含所有员工。Employee 表有三列&#xff1a;员工Id&#xff0c;公司名和薪水。 ------------------------- |Id | Company | Salary | ------------------------- |1 | A | 2341 | |2 | A | 341 …

【IEnumerable】扩展方法的使用 C#

直接进入主题吧... IEnumerable : 公开枚举数&#xff0c;该枚举数支持在非泛型集合上进行简单迭代。 好吧&#xff0c;迭代&#xff0c;我就理解成循环&#xff0c;这些名词真晦涩&#xff0c;没意思 今天看的是 Using Extension Methods &#xff0c;使用"扩展方法…

java的制造商,国内某通信设备制造商JavaEE开发岗面试题

1 EJB中有几种Bean&#xff0c;叙述有状态Bean和无状态Bean的区别。答&#xff1a;EJB中有Session Bean&#xff0c;Entity Bean&#xff0c;以及 Message Driven Bean。这两种的 Session Bean都可以将系统逻辑放在 method之中执行&#xff0c;不同的是 Stateful Session Bean …

LeetCode MySQL 571. 给定数字的频率查询中位数

文章目录1. 题目2. 解题1. 题目 Numbers 表保存数字的值及其频率。 ----------------------- | Number | Frequency | -----------------------| | 0 | 7 | | 1 | 1 | | 2 | 3 | | 3 | 1 | -------…

Java中文乱码处理

出现的情况&#xff1a; 表单FORM、POST、GET、超链接、sendRedirect() 解决方法&#xff1a; 如果是POST使用 HttpRequest.setCharacterEncoding("utf-8"); 如果是GET使用 String unew String( req.getParameter("username") .getBytes("iso-8859-1…

mysql 混合模式,SQLServer2005混合模式登录配置(用户登录错误18452,233,4064)

一、错误提示&#xff1a;用户登录失败,该用户与可信SQL Server连接无关联 错误18452原因是远程登录没配置好&#xff0c;配置方法如下&#xff1a;1&#xff1a;开启SQL2005远程连接功能配置工具->SQLServer外围应用配置器->服务和连接的外围应用配置器->打开SQLEXPR…

LeetCode 632. 最小区间(排序+滑动窗口)

文章目录1. 题目2. 解题1. 题目 你有 k 个升序排列的整数数组。 找到一个最小区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 b-a < d-c 或者在 b-a d-c 时 a < c&#xff0c;则区间 [a,b] 比 [c,d] 小。 示例 1: 输入:[[4,10,15,…

ubuntu安装操作HttpSQS高速队列

HTTPSQS安装 ulimit -SHn 65535wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gztar zxvf libevent-2.0.12-stable.tar.gzcd libevent-2.0.12-stable/./configure --prefix/usr/local/libevent-2.0.12-stable/makemake installcd ../wget http://https…

dz论坛php.ini设置,Discuz!X1.5至3.2论坛Win主机与Linux主机伪静态设置方法

用discuz x1.5至3.2的程序搭建的一个论坛&#xff0c;DZ论坛win主机与linux主机伪静态规则的设置方法&#xff01;Windows主机设置方法&#xff1a;1.建立一个名为 httpd.ini 的文件&#xff0c;可以先在电脑上面新建一个文本&#xff0c;然后将下面的这些代码复制到本文里面&a…