首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java方法、SocksSocketImpl、Profiling等

Java方法、SocksSocketImpl、Profiling等
EN

Stack Overflow用户
提问于 2015-01-15 10:59:48
回答 1查看 490关注 0票数 1

我们有一个批处理作业,它从数据库读取数据并将其写入文件。作业是在Spring 2.8之上编写的。我们已经注意到,它占用了大量的内存,并试图调整它。我在做练习时有一些问题。

  1. 我知道不建议执行finalize()。在我读过的许多帖子中,他们说对象可能会被推送到ReferenceQueue,而终结器线程会轮询队列。那么有什么办法,我可以自己检查队列吗?(我知道内存转储会显示这一点,但有时文件太大,无法从活动系统传输到本地机器并执行诊断)。
  2. 平凡的方法和非平凡的finalize()方法到底有什么区别?找不到一篇解释这件事的文章。
  3. 如果finalize()方法不是一个好主意,为什么AbstractPlainSocketImpl、FileInputStream和其他人要实现它?他们的finalize方法如何帮助他们在GC中,而不是无法到达或死代码的一部分?
  4. 在使用jvisualvm或jmc时,提交的堆大小显示为600 as。但是,当我在Linux环境上执行下面的命令时,它会将内存显示为800MB+。 500 -C java -o user,pid,pid,pcpu,rss,size,vsize,cmd _ grep x\ awk '{ print $3,$4,$5/1024}‘

环境细节

代码语言:javascript
复制
    Number of cores: 2
    OS: Red Hat Enterprise Linux Server release 6.5
    Total Physical Memory: 7.69GB
    JVM: Java HotSpot(TM) 64-Bit Server VM (24.45-b08) for linux-amd64 JRE (1.7.0_45-b18)
    JVM Command Line Arguments: -Xloggc:../logs/Job-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:-PrintTenuringDistribution -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -XX:-CITime -XX:-PrintClassHistogram -XX:-PrintConcurrentLocks -XX:-PrintAdaptiveSizePolicy -XX:-TraceClassLoading -XX:-TraceClassUnloading -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=server.com

    Garbage Collector used (this info is from JMC): ParallelScavenge for Young and ParallelOld for Old.
EN

回答 1

Stack Overflow用户

发布于 2019-01-23 08:44:24

我知道内存转储会显示这一点,但有时文件太大,无法从活动系统传输到本地机器并执行诊断。

命令tar -czf dump.tar.gz dump.hprof可以帮助您传输那个大文件。

3GB -> 100 3GB。

转储文件的压缩速率会非常高。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27961908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档