Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >操作系统能阻止Java进程垃圾收集吗?

操作系统能阻止Java进程垃圾收集吗?
EN

Stack Overflow用户
提问于 2013-04-18 10:40:57
回答 3查看 1K关注 0票数 6

我正在用AppDynamics监视一个生产系统,我们只是让系统慢到爬行,几乎冻结了。就在这个事件之前,AppDynamics显示了所有GC活动(小的和大同的),几个minutes...and的平行线,然后恢复活力。

即使在系统的超低负载期间,我们仍然看到我们的JVM在执行一些GC活动。我们从来没有得到完全持平,并下降到0。

另外-网络I/O与GC/内存平行线在相同的时间实例中平行线。

所以我问:系统级别的东西会导致JVM冻结,还是导致它的垃圾收集挂起/冻结?这是在一台CentOS机器上。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 08:00:01

您的操作系统是否启用了交换。

我注意到Java一旦在启用交换功能的情况下填满操作系统上的所有内存,就会出现巨大的问题--它实际上会偏离状态窗口系统,有效地锁定它们并导致重新启动。

我的理论是:

  • OS内存已接近满。
  • 操作系统从Java请求内存。
  • 这会将Java触发为一个完整的GC,以尝试释放内存。
  • 完整的GC几乎触及VM内存的每一个部分,甚至是已被交换掉的项。
  • 系统试图将数据交换回VM的内存中(在一个已经没有ram的系统上)
  • 这一直是雪球。

起初,它对系统的影响不大,但如果你试图启动一个需要大量内存的应用程序,它可能需要很长时间,而你的系统却一直在退化。

多个大型VM会使这种情况更糟,我运行3或4个大型VM,当我获得超过60%-70%的RAM使用量时,我的系统就开始运转起来。

这是猜测,但它描述了我经过几天的测试后所看到的行为。

其效果是,所有的交换似乎是“防止”gc。更准确地说,操作系统正在花费大部分GC时间交换,这使它看起来像是在GC期间什么都不做。

将-Xmx设置为较低的值,直到允许有足够的空间以避免交换为止.这总是解决了我的问题,如果它不能解决你的问题,那么我对你问题的原因就错了:)

票数 1
EN

Stack Overflow用户

发布于 2013-04-19 07:49:57

如果没有更多的信息,就很难找到问题的确切原因。

但我可以试着回答你的问题

操作系统能阻止垃圾收集吗?

这与操作系统阻止线程垃圾收集器并让其他线程运行是不太可能的。你不应该那样调查。

操作系统能阻止JVM吗?

是的,它可以完成很多任务,但是速度比你想象的要快,以至于所有的进程都在同时运行。

jvm和其他进程一样,在操作系统的控制下运行。您必须在应用程序挂起时检查它所使用的cpu (在服务器上监视,而不是在jvm中)。如果这个数字很低,我就会看到两个原因(但还有更多):

  • 您的服务器没有足够的RAM并且正在交换(RAM <->磁盘),进程变得非常慢。在这种情况下,cpu在服务器上会很高,但是对于jvm来说会很低。
  • 另一个进程或服务器获取资源,而您的应用程序或服务器没有收到任何信息。检查CentOs的优先级。
票数 1
EN

Stack Overflow用户

发布于 2013-04-19 07:59:28

理论上说,是的,可以。但它会练习,永远也不应该。

在大多数Java虚拟机中,应用程序线程并不是唯一正在运行的线程。除了应用程序线程之外,还有编译线程、终结器线程、垃圾收集线程等等。为这些线程和机器上运行的其他程序中的其他线程分配CPU核心的调度决策基于许多参数(线程优先级、最后执行时间等),这些参数对所有线程都是公平的。因此,在实践中,系统中的任何线程都不应该在不合理的长时间内等待CPU的分配,并且操作系统不应该在无限的时间内阻塞任何线程。

垃圾收集线程(和其他VM线程)需要做的活动很少。他们需要定期检查是否需要垃圾收集。即使应用程序线程全部挂起,也可能有其他VM线程(如JIT编译器线程或终结器线程)工作,从而分配对象和触发垃圾收集。对于在Java中实现VM线程而不是在C/C++中实现VM线程的元循环JVM尤其如此;

此外,大多数现代JVM使用分代垃圾收集器(将堆划分为单独的空间并将具有不同年龄的对象放置在堆的不同部分的垃圾收集器),这意味着随着对象越来越老,它们需要移动到其他旧空间。因此,即使不需要收集对象,分代垃圾收集器也可以将对象从一个空间移动到另一个空间。

当然,每个垃圾收集器的细节与JVM不同。为了在伤害上添加更多的盐,一些JVM支持不止一种类型的垃圾收集器。但是,在空闲应用程序中看到最小的垃圾收集活动并不令人惊讶。

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

https://stackoverflow.com/questions/16090702

复制
相关文章
Java中的TCP通信程序
TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端
一只胡说八道的猴子
2020/09/27
1.2K0
Java中的TCP通信程序
客户端程序传送图片到服务器
转载:http://www.cnblogs.com/networkcomms/p/4314898.html
跟着阿笨一起玩NET
2018/09/19
2.6K0
客户端程序传送图片到服务器
一个Java实现的简单的多个客户端聊天程序
客户端 import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.*; import java.net.*; public class HeartClient extends Frame { /* * 成员方法出场... */ private TextField tfText; private TextArea taContent; private
用户8671053
2021/09/22
1.1K1
python服务器客户端通信
这里主要使用python的flask框架搭建一个简易服务器端,然后使用httplib库作为客户端与服务端进行通信,传输json数据并统计打包,网络传输,解包的时间。
零式的天空
2022/03/22
4K0
Java利用TCP协议实现客户端与服务器通信【附通信源码】
上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP、TCP、UDP以及端口和套接字的一些概念,想了解的小伙伴可以看我的这篇文章“盘点那些进行网络编程必须要知道的基础知识”,那么今天大灰狼就来和大家分享一下如何使用TCP/IP进行网络程序的开发。
灰小猿
2020/09/23
3.5K0
Java利用TCP协议实现客户端与服务器通信【附通信源码】
Java中的UDP通信
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。与TCP协议不同,UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。在发送数据前,需要进行封包操作(使用 DatagramPacket 类),才能发送和接收数据(使用 DatagramSocket 类)。
头发还在
2023/10/16
2020
Java中的UDP通信
Java中多个异常的捕获顺序(多个catch)
import java.io.IOException;   public class ExceptionTryCatchTest {       public void doSomething() throws IOException{           System.out.println("do somthing");       }       public static void main(String[] args){           ExceptionTryCatchTest etct = new ExceptionTryCatchTest();           try {               etct.doSomething();           } catch (Exception e) {                          } catch (IOException e) {                          }       }      }
用户7886150
2021/04/25
3.8K0
Linux Tcp通信——服务器与客户端
之前一直想做linux+qt方向的,然而现在变成嵌入式软件方向了。其实也还好吧,这样就需要对底层的一些东西了解,目前是智能交通行业了。
用户5908113
2020/05/28
7K0
Linux 中复制文件到多个目录中
在学习 Linux 的过程中,对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而,如果你想要成为一个老手,学习一些“快捷命令”会显著减少时间浪费。
小小工匠
2021/08/16
5.4K0
Java中TCP通信的实现
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,
头发还在
2023/10/16
1910
Java中TCP通信的实现
利用xutils框架在Android上传多个文件到Struts搭建的java服务器
现在Android+SSH服务器非常流行,因为最近业务需要实现利用Android发表博客的需求,这个时候就需要上传多个文件到服务器中。因为现在框架都非常好用,不需要自己从底层自己开始搭建框架。网络上面的大多数都是Android+Servlet实现的Android上传功能。这里因为我用的是SSH框架进行开发的,所以当然要用Struts2来代替Servlet的功能来实现文件接收的功能,Android中利用xutils框架实现上传的功能。
林老师带你学编程
2022/11/30
6040
【说站】python中客户端通信的实现流程
以上就是python中客户端通信的实现流程,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
6490
java中类中多个Synchronized方法
下面给出一个例子,说明一个class中有两个方法synchronized的情况。它们互相阻挡的用法和上面的“一个方法有synchronized”的情况是一样的。
马克java社区
2021/04/23
9020
java中类中多个Synchronized方法
客户端和服务器的通信,protobuf和协议格式
游戏服务器和客户端的通信有很多种形式,有的用http,有的用websocket,不过最常见的还是socket服务器,socket 服务器在游戏中是最常见的,至于为什么和怎么创建,等以后再说,今天先来聊聊服务器和客户端交谈的协议。协议的定义是服务端和客户端沟通的结果,形成一致的数据格式,这样大家才好解析,知道对方在说什么,在做什么。
香菜聊游戏
2021/05/26
1.7K0
客户端和服务器的通信,protobuf和协议格式
203-ESP32_SDK开发-TCP服务器(模组AP热点模式,支持多个客户端连接通信)
①:信号量的个数和客户端的个数一样,每次创建一个客户端就取走一个信号量,每关闭一个客户端就回收一个,这样子的话限制了客户端的连接个数.
杨奉武
2021/12/01
9710
203-ESP32_SDK开发-TCP服务器(模组AP热点模式,支持多个客户端连接通信)
多个线程之间的通信问题
在同步代码块中,锁对象是谁,就用那个对象来调用wait和notify 为什么wait方法和notify方法需要定义在Object?       因为所有的对象都是Object的子类对象,而所欲的对象都可以当做锁对象
砖业洋__
2023/05/06
4120
多个线程之间的通信问题
Java中多个ifelse语句的替代设计
ifelse是任何编程语言的重要组成部分。但是我们编写了大量嵌套的if语句,这使得我们的代码更加复杂和难以维护。
王知无-import_bigdata
2019/07/01
3.4K0
如何实现小程序与服务器通信
网络请求方式较多,大家可以参考如何在小程序中实现文件上传下载和如何在小程序中实现 WebSocket 通信实现更多与服务器请求。
伤旧
2018/11/16
10.4K0
如何实现小程序与服务器通信
微信小程序坦克双人对战-客户端+java服务器1.0
最近小程序的游戏风靡,这些游戏简直都是打发时间的利器,特别是【跳一跳】,简直是有毒,根本停不下来。但是你知道吗?除了【跳一跳】,其实微信小程序还上线了十多款小游戏!许多人小时候在红白游戏机上玩的「坦克大战」游戏,现在也可以在微信里玩到啦! 除了经典人机对战模式,小游戏中还加入了好友实时对战。也就是说,你可与好友同场竞技!
程序源代码
2018/09/21
5.7K0
微信小程序坦克双人对战-客户端+java服务器1.0
点击加载更多

相似问题

服务器到多个客户端通信

10

多个也是客户端的服务器- JAVA中的通信

10

用Java实现客户端到服务器的通信

12

Java,客户端-服务器通信

20

Java通信客户端/服务器

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文