首页 > 其他分享 >Runtime - 运行时环境类(JVM)和大数值运算(BigInteger、BigDecimal)

Runtime - 运行时环境类(JVM)和大数值运算(BigInteger、BigDecimal)

时间:2023-06-11 16:31:55浏览次数:39  
标签:BigInteger BigDecimal big2 big1 System JVM println Runtime out

Runtime代表Java程序的运行时环境,可以通过 getRuntime 方法获取当前运行时。

应用程序不能自己创建Runtime对象,可以通过Runtime的静态方法getRuntime()获得Runtime对象。

Runtime类可以访问jvm的相关信息

1、处理器数量

runtime.availableProcessors()

2、内存信息

"获取最大内存数" --》 runtime.maxMemory()

"获取闲置内存数" --》runtime.freeMemory()

Runtime应用

另外还可以通过Runtime来判断一段程序的快慢,来看它运行程序的效率:时长+内存。

1.直接用str字符串拼接

Runtime runtime = Runtime.getRuntime();//获取Rantime的对象
		long startMemory = runtime.freeMemory();//获取开始的内存数量
		long startTime = System.currentTimeMillis();
		String str = "你好,小伙子";
		for (int i = 0; i < 10000; i++) {
			str += "你好,小伙子";
		}
		System.out.println("字符串长度:" + str.length());
		long endTime = System.currentTimeMillis();
		long endMemory = runtime.freeMemory();//获取最后的内存数量
		System.out.println("消耗时长:" + (endTime-startTime));//175毫秒
		System.out.println("消耗内存:" + (startMemory-endMemory));//-167506344
		//(内存消耗是负的,因为不断地new对象,当内存不够用的时候,垃圾回收器(JC)介入,把一些闲置内存回收掉)

2.用StringBuilder拼接

Runtime runtime = Runtime.getRuntime();
		long startMemory = runtime.freeMemory();
		long startTime = System.currentTimeMillis();
		StringBuilder sb = new StringBuilder(60006);
		sb.append("你好,小伙子");
		for (int i = 0; i < 10000; i++) {
			sb.append("你好,小伙子");
		}
		System.out.println("字符串长度:" + sb.length());
		long endTime = System.currentTimeMillis();
		long endMemory = runtime.freeMemory();
		System.out.println("消耗时长:" + (endTime-startTime));//1毫秒
		System.out.println("消耗内存:" + (startMemory-endMemory));//0

大数值运算

出现原因:

int i1 = 1234567890;
int i2 = 1234567890;
System.out.println(i1 + i2);//-1825831516--因为数字过大相加过后超过Int类型的取值范围,失去精度

1.整数大数值运算类 BigInteger

//参数传入String类型
		BigInteger big1 = new BigInteger("1234567891234567890");//继承的Number
		BigInteger big2 = new BigInteger("1234567891234567890");
		
		BigInteger add = big1.add(big2);//加法
		System.out.println(add);
		
		BigInteger subtract = big1.subtract(big2);
		System.out.println(subtract);//减法
		
		BigInteger multiply = big1.multiply(big2);
		System.out.println(multiply);//乘法
		
		BigInteger divide = big1.divide(big2);
		System.out.println(divide);//除法

注意:无论是整数还是小数的大数值运算传入的参数都是String类型

2.小数大数值运算类 BigDecimal

System.out.println(0.5 - 0.4);//0.09999999999999998  //会失去精度

		//参数传入String类型
		BigDecimal big1 = new BigDecimal("0.5");//继承的Number
		BigDecimal big2 = new BigDecimal("0.4");

		BigDecimal add = big1.add(big2);//加法
		System.out.println(add);

		BigDecimal subtract = big1.subtract(big2);
		System.out.println(subtract);//减法

		BigDecimal multiply = big1.multiply(big2);
		System.out.println(multiply);//乘法

		BigDecimal divide = big1.divide(big2);
		System.out.println(divide);//除法

特殊情况

		BigDecimal big1 = new BigDecimal("10");
		BigDecimal big2 = new BigDecimal("3");
		
		//BigDecimal divide1 = big1.divide(big2);
		//System.out.println(divide1);//会报算数异常

		BigDecimal divide = big1.divide(big2, 3, BigDecimal.ROUND_HALF_UP);//四舍五入三位小数
		System.out.println(divide);//3.333

标签:BigInteger,BigDecimal,big2,big1,System,JVM,println,Runtime,out
From: https://blog.51cto.com/u_16154651/6458206

相关文章

  • jvm简单介绍(JDK1.8)
     线程私有程序计数器主要有两个作用:字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。注意:程......
  • com.netflix.hystrix.exception.HystrixRuntimeException: xxxFeign#xxxx timed-out a
    问题描述在使用Feign进行远程调用时遇到的bug。原因是因为超时了。需要对超时时间进行设置一下即可。在Nacos进行设置原先的contentTimeout和readTimeout都是2000,修改成20000后bug便解决了。......
  • RuntimeError: Error building extension ‘fused‘&FAILED: fused_bias_act_kernel.c
    RuntimeError:Errorbuildingextension‘fused’&FAILED:fused_bias_act_kernel.cuda.o&ninja:buildstopped:subcommandfailed.问题如下:RuntimeError:Errorbuildingextension‘fused’:[1/3]/usr/local/cuda/bin/nvcc-DTORCH_EXTENSION_NAME=fused-DTORCH_......
  • [Java SE] 彻底搞懂Java程序的三大参数配置途径:系统变量与JVM参数(VM Option)/环境变
    0序言一次没搞懂,处处受影响。这个问题属于基础问题,但又经常踩坑,不得不重视一下了。1Java程序动态参数的配置途径:系统变量与JVM参数(VMOption)vs环境变量vs启动程序参数argsIDEA中的配置位置参数使用方式示例代码获取方式系统属性由操作系统、JVM、应用......
  • Kotlin中的@JvmOverloads注解的解释
    在自定义一些控件的时候,我经常会直接写入需要的参数,比如:classMaskedCardView(context:Context,attributeSet:AttributeSet?=null,defStyle:Int=com.google.android.material.R.attr.materialCardViewStyle):MaterialCardView(context,attributeSet,defS......
  • 从微软 Integration RunTIme学到的设计思路
    首先在云上服务添加一个runtime条目,生成一个key:里面包含云上服务地址和客户端RUNTIME的ID在云下安装runtime时,只需要输入key,则runtime会根据里面的信息连接到云上服务,并注册自己在云上即可使用该RUMTIME配置各种采集信息RUNTIME从云上服务拉取各种配置信息,再把数据上传到云......
  • 面试官:你会哪些JVM调优参数?
    你好,我是田哥。上周一位朋友去面试被问到JVM参数,本文咱们就来聊聊。面试造火箭.......,我们很多人干了三、五年的Java开发,其实压根儿没使用过JVM调优参数。但是,面试官可不管你有没有用过,面试官心里想的是“这问题回答不出来,证明你很lowB,还想要那么高的薪资,没门”。话不多说,我们开始......
  • jvm-第一节基础概念
    #jvm-第一节基础概念(需要了解基础概念,比如jvm运行时数据区都有什么,都是干啥的,类比os中那些部件)jvm的内存结构jvm的全称呼javavirtualmachine,是在os的基础上虚拟出来的一块区域,可以调用os的函数,也可以把。class文件翻译成机器码在os上执行,也是java实现跨平台的原因,上面......
  • 在intelj idea中Debug启动tomcat时Address already in use:JVM_Bind
    在debug重启web应用时,偶尔会报如下错误:Addressalreadyinuse:JVM_Bind,一看端口占用 打开任务管理器,发现并没有java相关的进程。所以无法通过杀死进程来解除接口占用,可以通过如下方式解决1.编辑服务器配置,EditConfiguration 2.点击Startup/Connection 3.选中debug,......
  • JVM内存结构&Java内存模型&Java对象模型
    1.JVM内存结构Java代码是运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把管理的内存划分为若干个不同的数据区域。其中有些区域是随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。而这些区域会被划分为五个区域,具体的如下:方法区:方法区与是......