- 浏览: 410259 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1036经典SQL语句大全 一、基础 1、说明: ... -
ATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ER
2013-07-04 15:38 4038windos系统bug 因为我的机器比较内存比较少512M, ... -
java读取文本文件数据
2013-01-24 23:41 1092import java.io.*; public cla ... -
java复习(set 、list、map)
2013-01-24 23:27 1146复习 public static void main( ... -
java代码实现excel输到导入oracle
2012-07-31 13:28 15011.首先需要两个jar包jxl.jar,ojdbc.jar(注 ... -
使用doc命令将java工程生成.jar文件和war文件
2011-12-30 09:56 1314假定有一个Web应用:C:\myHome myHom ... -
堆栈 新的 认识
2011-10-31 14:24 1240A a = new A(); 在堆开辟空间,并把值存在堆 ... -
java实现捕捉屏幕
2011-10-15 16:17 1690要使用的是java.util.Robot类来捕获屏幕,可以实现 ... -
抽象类、抽象方法、接口
2011-10-13 10:55 1139抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象 ... -
java死锁
2011-10-10 22:05 877package cn.com.io.threadDem ... -
for和foreach使用?
2011-08-29 15:03 706在JDK5.0中加入了一个新的特性,那就是FOR-EACH循环 ... -
java开发群
2011-08-25 20:08 41欢迎java群1670293,希望有工作经验热情的加入---- ... -
JAVA中,如何判断一个字符串中包含的字符在另一个字符前面?
2011-06-30 13:34 3613[color=indigo]用它们在这个字符串中的位置来判断。 ... -
java实现判断A中是否包含B
2011-06-30 13:33 1327代码 package day6; public cla ... -
导入word到Fckeditor(java实现)
2011-06-24 13:58 1185最近项目可以说到达了一个里程碑,借这篇文章把前面的技术进行总结 ... -
使用3中不同的方式 从集合中取数据
2011-05-25 10:47 973代码 package iter; import jav ... -
Java反射
2011-05-05 08:49 852[color=blue]Java Reflection (JA ... -
Java反射机制
2011-05-05 08:48 744JAVA反射机制 JAVA ... -
get 和post
2011-05-05 08:39 845表单form的提交有两种方式,一种是get的方法,一种是pos ... -
java实现打印金字塔
2011-04-26 15:22 1580package io; import java.ut ...
相关推荐
Java中的`Runtime`类是每个Java应用程序都会自动创建的一个...手动触发垃圾回收(通过`System.gc()`或`Runtime.getRuntime().gc()`)并不推荐,因为这可能会对性能产生负面影响,因为垃圾回收的时机最好由JVM自行决定。
System.gc(); } ``` 在上面的代码中,我们首先检查 Bitmap 对象是否为空和是否已经回收,如果是,则回收 Bitmap 对象并手动调用 GC。 解决方案 4:图片必须进行缩放 在加载大图片时,图片的大小是一个重要的因素...
GC 可以通过 System.gc() 或 Runtime.getRuntime().gc() 方法请求垃圾收集。 二、字符串 创建一个字符串 "xyz" 时,实际上创建了两个对象,一个是 "xyz" 本身,另一个是指向 "xyz" 的引用对象 s。 三、Math 函数 ...
* 可以通过 System.gc() 或 Runtime.getRuntime().gc() 请求垃圾收集。 7. String 对象的创建: * new String("xyz") 创建两个对象,一个是“xyz”,一个是指向“xyz”的引用对象 s。 8. Math.round() 的使用: ...
实际上调用 System.gc() 就相当于调用 Runtime.getRuntime().gc() 方法。 3. Error 和 Exception 的区别: Error 是表示由 JVM 进行处理,是 JVM 出错。Exception 是可以由程序进行处理的,使用 try..catch 进行...
要请求垃圾收集,可以调用System.gc()或Runtime.getRuntime().gc()方法。 11. String s = new String("xyz");创建了几个String Object? 两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。 12. Math.round...
Jvm 的垃圾回收机制可以通过 System.gc() 或 Runtime.getRuntime().gc() 方法来触发。 Jvm 的类加载机制采用双亲委托机制,即除了顶层的启动类加载器以外,其余的类加载器,在加载之前,都会委派给它的父加载器进行...
在Java编程语言中,String和StringBuffer是两个重要的类,它们在处理文本数据时有着显著的...调用System.gc()或Runtime.getRuntime().gc()可以请求执行垃圾收集,但这些方法仅作为提示,实际何时执行GC由JVM自行决定。
可以使用 dalvik.system.VMRuntime 类提供的 setTargetHeapUtilization 方法来增强程序堆内存的处理效率。 例如: ```java private final static float TARGET_HEAP_UTILIZATION = 0.75f; VMRuntime.getRuntime()....
例如,当需要从网络下载较大图像时,应先调用`System.gc()`触发垃圾回收,随后通过`Runtime.getRuntime().freeMemory()`检查当前可用内存。如果内存不足,应向用户发出警告而非直接导致程序崩溃,确保用户体验。 ``...
3. **运行时信息**:`Runtime.getRuntime()`返回一个`Runtime`对象,用于与Java虚拟机进行交互。你可以通过它来获取CPU核心数、总内存、剩余内存等信息。例如,`Runtime.getRuntime().availableProcessors()`返回...
文档中提到了System.gc()和Runtime.getRuntime().gc()方法,它们用于建议JVM执行垃圾回收,释放不再使用的对象内存。 8. 类型转换和精度丢失 通过代码片段`int x=(int)y;`可以发现,将double类型变量y强制转换为int...
`System.gc()`和`Runtime.getRuntime().gc()`用于请求垃圾收集。 19. `String`对象创建: - `String s = new String("xyz");`创建了两个对象,一个在常量池,一个在堆内存。 - `String s = "xyz";`只创建了一个对象...
通过System.gc()或Runtime.getRuntime().gc()可以请求垃圾收集,但通常不推荐这样做,因为这可能导致性能下降。 7. **String对象创建**:`String s = new String("xyz");`创建了两个对象,一个是字面量"xyz",另一...
调用System.gc()或Runtime.getRuntime().gc()可以请求垃圾收集,但不保证立即执行。 9. **String对象创建**:`String s = new String("xyz");`创建了两个对象,一个字符串常量"xyz",一个指向它的String对象s。 10...
`System.gc()`和`Runtime.getRuntime().gc()`是建议JVM进行垃圾回收的语句,但它们只是建议,并不能强制执行。垃圾回收器会在适当的时候自动回收不再使用的对象所占用的内存。 总结来说,Java的基础知识包括但不...
在Java中,可以通过System.gc()或Runtime.getRuntime().gc()方法请求虚拟机进行垃圾回收,但具体时机由垃圾收集器决定。 9. 异常处理中的sleep()和wait()方法 sleep()方法属于Thread类,使当前线程暂停执行指定的...