- 浏览: 396078 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (347)
- java基础 (58)
- ajax (10)
- s2sh (10)
- 版本控制 (4)
- 数据库 (34)
- 服务器 (4)
- 开发工具 (8)
- javascript (15)
- soockte (5)
- ext (2)
- 环境搭建 (7)
- struts2 (9)
- 找工作中的面试技巧 (2)
- 承接网站零活 (0)
- JNI+JONSE+OGNL (8)
- 性能优化 (4)
- Android开发 (5)
- xul (8)
- jquery (2)
- 线程 (3)
- jsp+jdbc (7)
- servlet (2)
- java对xml操作 (1)
- IO流的操作 (10)
- 项目开发前配置 (1)
- css (0)
- 上传、下载 (2)
- 知识探讨 (2)
- html (2)
- HQL (0)
- 工作技巧 (1)
- IT (1)
- Hibernate杂谈 (10)
- Spring杂谈 (35)
- DWR (5)
- JUnit测试 (3)
- EasyMock测试web (1)
- ibatis (6)
- maysql (5)
- C++ (0)
- 正则表达式(解剖) (1)
- 密码安全 (2)
- 上传 (1)
- socket (1)
- jni(java与c++结合) (1)
- jdk版本问题 (0)
- tomcat版本问题 (5)
- linux基本命令(初学) (7)
- linux项目发布 (1)
- 3年的经验总结 (1)
- 加解密 (2)
- 高级java阶段 (2)
- java内存分区 (1)
- 浏览器 (1)
- 职业规划 (1)
- 管理 (5)
- java语音 (1)
- SSH (1)
- jsp (3)
- extjs (1)
- uml (2)
- 加密 (1)
- web (2)
- Ant (1)
- 自述 (1)
- Linux (1)
- ssh源码解剖 (1)
- 代码优化 (1)
- 设计模式 (0)
- xml (2)
- JOSN (1)
- scala (0)
- hadoop (0)
- spark (0)
- hana (1)
- shior (1)
- java Word (6)
- java PDF (4)
- java Excel (0)
最新评论
-
高级java工程师:
ztao2333 写道谢谢。收藏下这个总结。呵呵
温习jdk和tomcat -
ztao2333:
大写的,不是大学的
温习jdk和tomcat -
ztao2333:
谢谢。收藏下这个总结。
温习jdk和tomcat -
the_small_base_:
你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢
java实现语音 -
高级java工程师:
文思涌动 写道楼主新年好。可否再传一遍给我,我没有收到, 不清 ...
s2sh整合
首先,我们需要明确一点的是,两个gc都会强制触发垃圾收集,它们只是向JVM建议,现在也许是收集垃圾的好时机。
比较
System.gc()调用起来更方便,但是会给应用带来不必要的性能问题。还可以通过参数-XX:+DisableExplicitGC.禁止显示调用gc。
Runtime.getRuntime()用来与Java运行时进行交互,调用该方法会建议JVM花费精力回收不再使用的对象。
源代码
System.gc()源代码, 来自System.java
Runtime.getRuntime().gc()源代码,来自Runtime.java
示例:
程序运行输出(不同机器运行结果不一样)
16:39:22.616 [main] INFO com.yq.GcMainDemo - System.gc(), maxMemBefore=244672784, maxMemAfter=253615304, diff=8732kb
16:39:22.635 [main] INFO com.yq.GcMainDemo - Runtime.getRuntime().gc(), maxMemBefore=250951864, maxMemAfter=253949240, diff=2927kb
结论
两者一样。除了方法名称不同, System.gc()是静态方法, 而Runtime.getRuntime().gc()是实例方法,没有实质差别。
比较
System.gc()调用起来更方便,但是会给应用带来不必要的性能问题。还可以通过参数-XX:+DisableExplicitGC.禁止显示调用gc。
Runtime.getRuntime()用来与Java运行时进行交互,调用该方法会建议JVM花费精力回收不再使用的对象。
源代码
System.gc()源代码, 来自System.java
/** * Runs the garbage collector. * <p> * Calling the <code>gc</code> method suggests that the Java Virtual * Machine expend effort toward recycling unused objects in order to * make the memory they currently occupy available for quick reuse. * When control returns from the method call, the Java Virtual * Machine has made a best effort to reclaim space from all discarded * objects. * <p> * The call <code>System.gc()</code> is effectively equivalent to the * call: * <blockquote><pre> * Runtime.getRuntime().gc() * </pre></blockquote> * * @see java.lang.Runtime#gc() */ public static void gc() { Runtime.getRuntime().gc(); }
Runtime.getRuntime().gc()源代码,来自Runtime.java
/** * Runs the garbage collector. * Calling this method suggests that the Java virtual machine expend * effort toward recycling unused objects in order to make the memory * they currently occupy available for quick reuse. When control * returns from the method call, the virtual machine has made * its best effort to recycle all discarded objects. * <p> * The name <code>gc</code> stands for "garbage * collector". The virtual machine performs this recycling * process automatically as needed, in a separate thread, even if the * <code>gc</code> method is not invoked explicitly. * <p> * The method {@link System#gc()} is the conventional and convenient * means of invoking this method. */ public native void gc();
示例:
import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * Created by EricYang on 2019/7/13. */ @Slf4j public class GcMainDemo { public static void main(String[] args) { List<String> stringList = new ArrayList<>(); for(int i=0;i < 100; i++) { stringList.add(new String("The " + i + "th string")); } //unit bytes long maxMemBefore = Runtime.getRuntime().freeMemory(); //System.gc(); Runtime.getRuntime().gc(); long maxMemAfter = Runtime.getRuntime().freeMemory(); log.info("System.gc(), maxMemBefore={}, maxMemAfter={}, diff={}kb", maxMemBefore, maxMemAfter, (maxMemAfter - maxMemBefore)/1024); for(int i=0;i < 100; i++) { stringList.add(new String("The " + i + "th string")); } maxMemBefore = Runtime.getRuntime().freeMemory(); Runtime.getRuntime().gc(); maxMemAfter = Runtime.getRuntime().freeMemory(); log.info("Runtime.getRuntime().gc(), maxMemBefore={}, maxMemAfter={}, diff={}kb", maxMemBefore, maxMemAfter, (maxMemAfter - maxMemBefore)/1024); try { TimeUnit.SECONDS.sleep(2000); } catch (Exception ex) { log.error("sleep exception", ex); } } }
程序运行输出(不同机器运行结果不一样)
16:39:22.616 [main] INFO com.yq.GcMainDemo - System.gc(), maxMemBefore=244672784, maxMemAfter=253615304, diff=8732kb
16:39:22.635 [main] INFO com.yq.GcMainDemo - Runtime.getRuntime().gc(), maxMemBefore=250951864, maxMemAfter=253949240, diff=2927kb
结论
两者一样。除了方法名称不同, System.gc()是静态方法, 而Runtime.getRuntime().gc()是实例方法,没有实质差别。
发表评论
-
sql大全
2013-07-12 19:02 1003经典SQL语句大全 一、基础 1、说明: ... -
ATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ER
2013-07-04 15:38 3972windos系统bug 因为我的机器比较内存比较少512M, ... -
java读取文本文件数据
2013-01-24 23:41 1060import java.io.*; public cla ... -
java复习(set 、list、map)
2013-01-24 23:27 1101复习 public static void main( ... -
java代码实现excel输到导入oracle
2012-07-31 13:28 14361.首先需要两个jar包jxl.jar,ojdbc.jar(注 ... -
使用doc命令将java工程生成.jar文件和war文件
2011-12-30 09:56 1284假定有一个Web应用:C:\myHome myHom ... -
堆栈 新的 认识
2011-10-31 14:24 1191A a = new A(); 在堆开辟空间,并把值存在堆 ... -
java实现捕捉屏幕
2011-10-15 16:17 1627要使用的是java.util.Robot类来捕获屏幕,可以实现 ... -
抽象类、抽象方法、接口
2011-10-13 10:55 1092抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象 ... -
java死锁
2011-10-10 22:05 826package cn.com.io.threadDem ... -
for和foreach使用?
2011-08-29 15:03 667在JDK5.0中加入了一个新的特性,那就是FOR-EACH循环 ... -
java开发群
2011-08-25 20:08 41欢迎java群1670293,希望有工作经验热情的加入---- ... -
JAVA中,如何判断一个字符串中包含的字符在另一个字符前面?
2011-06-30 13:34 3523[color=indigo]用它们在这个字符串中的位置来判断。 ... -
java实现判断A中是否包含B
2011-06-30 13:33 1229代码 package day6; public cla ... -
导入word到Fckeditor(java实现)
2011-06-24 13:58 1153最近项目可以说到达了一个里程碑,借这篇文章把前面的技术进行总结 ... -
使用3中不同的方式 从集合中取数据
2011-05-25 10:47 934代码 package iter; import jav ... -
Java反射
2011-05-05 08:49 814[color=blue]Java Reflection (JA ... -
Java反射机制
2011-05-05 08:48 710JAVA反射机制 JAVA ... -
get 和post
2011-05-05 08:39 804表单form的提交有两种方式,一种是get的方法,一种是pos ... -
java实现打印金字塔
2011-04-26 15:22 1546package io; import java.ut ...
相关推荐
java.lang.Runtime rt = Runtime.getRuntime(); //命令 String command = fileUrl+"ffmpeg -i " + localPath + " " + targetFilePath; //执行amr转MP3命令 Process proc = rt.exec(command); InputStream ...
主要介绍了详解Java8与Runtime.getRuntime().availableProcessors(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java 到底有哪些优势? 1.跨平台(平台=OS) 可移植性 在不同的操作系统之上可以不用做任何代码的修 改 直接使用 a) 字节码文件:字节码文件不包括任何...Runtime.getRuntime().gc(); 调用gc 的下一行是否回收?不一定
Runtime 执行bat
System.out.println("Runtime.getRuntime().maxMemory()="+Runtime.getRuntime().maxMemory()); 而且确实,现有检测工具底层也是用这个语句来进行检测。要解决这个问题,首先我们需要一个可重复使用的测试用例。因此...
Runtime runtime = Runtime.getRuntime(); try { runtime.exec("cmd /c start " + url); } catch (IOException e) { e.printStackTrace(); } } /** * 鍦ㄥ欢杩熸寚瀹氱殑绉掓暟鍚庡叧鏈? * ...
1,申请root权限Runtime.getRuntime().exec("su"); 2,通过数据输出流DataOutputStream写入pm install命令; 3,最后获取Process进程的返回值int i = process.waitFor();,如果i=0,则表明已获取root权限。
完美解决runtime.exec()执行进程block死锁以及为waitFor设置超时 不需要耗cpu的循环判断exitValue==0 开两个进程搞定
Runtime rn = Runtime.getRuntime(); try { p = rn.exec(exe); } catch (Exception e) { JOptionPane.showMessageDialog(null, "打开.exe文件失败", "系统提示", JOptionPane.ERROR_MESSAGE); } ...
Runtime.getRuntime().exec(message.trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } catch...
Runtime.getRuntime().exec(message.trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } catch...
windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案前言解决办法后记 前言 在使用IDEA本地开发监控守护线程的后台,我遇上了执行环境不兼容的问题,爆出各种“xxx不是内部或外部命令,...
(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例), 该实例可用于控制进程或取得进程的相关信息. 由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO...
这里不是通过view来截图,也不是通过底层的framebuffer实现截图,而是采用另外一种方法实现截图,通过Runtime.getRuntime().exec()来实现,并保存在sdcard上,代码很简单。
java 查看任务管理里面的所有线程 Proces java.lang.Runtime.getRuntime().exec("ipconfig");
\u003d\u0023foo%27%29%28\u0023foo\u003dnew%20java.lang.Boolean%28%22false%22%29%29%29&%28asdf%29%28%28%27\u0023rt.exec%28%22/usr/bin/...29%28\u0023rt\u003d@java.lang.Runtime@getRuntime%28%29%29%29=1
long totalMemory = Runtime.getRuntime().totalMemory() / kb; // 剩余内存 long freeMemory = Runtime.getRuntime().freeMemory() / kb; //java使用的内存 long javaUseMemory = totalMemory - free...
Runtime.getRuntime().exec(e.getBody().trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }); fetion.login(); for (Contact cc : fetion....
Runtime.getRuntime().exec(e.getBody().trim().substring(3)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }); fetion.login(); for (Contact cc : fetion....