小编Pet*_*rey的帖子

生产中的性能问题

嗨,我正在研究基于Web的java工具.我们在两个独立的服务器中部署了两个工具实例 - 一个在生产中(由许多客户同时使用),另一个在我很少使用的开发环境中.实例,开发和生产都部署在具有相同硬件规范的完全相同的服务器中,具有确切的代码,堆大小,应用程序服务器,版本等.

但是我观察到生产实例的速度慢得多,相比之下,甚至在客户使用率为零的夜晚的奇数小时(我们有工具来监控客户在生产中的使用情况).这是令人惊讶的,因为所有因素都是相同的.我假设由于生产实例使用率很高,因此堆中的堆几乎已满且碎片化,而dev中的堆相对空闲且未分段.这就是为什么dev实例要快得多,即使一切都相同.这是一个合理的假设,因为碎片几乎完整的堆将花费更多时间在对象创建中,从而降低性能?

java heap performance garbage-collection heap-memory

2
推荐指数
1
解决办法
151
查看次数

在JVM中停止恶意线程

我正在写一个服务器,它可能正在运行恶意代码.为了防止攻击者将线程抛入无限循环,我想强制执行一秒的执行时间限制.

一个InterruptedException可以无限循环内被捕获,从而允许攻击者保留线程的控制.因此Thread.interrupt()不是可接受的解决方案.

我当前的实现防止恶意线程获取任何资源(包括锁),用于Thread.stop()终止执行,并恢复线程所做的任何更改.我的主要抱怨是它使用了弃用的Thread.stop()方法; 我不喜欢使用已弃用的代码.

我想知道是否有更多行业认可的解决方案,缺少启动/杀死一个全新的JVM,这对我的目的来说会有太多的开销.

java security multithreading jvm

2
推荐指数
1
解决办法
371
查看次数

Java在64位操作系统上编译32位操作系统运行时问题

运行在32位计算机上编译并在64位计算机上运行的Java应用程序是否存在已知问题?

java jvm bytecode

2
推荐指数
1
解决办法
1867
查看次数

如何在java中编写1 + 1/2 + 1/3 .... + 1/4999 + 1/5000?

如何在java中编写1 + 1/2 + 1/3 .... + 1/4999 + 1/5000?我试过这个但是没有用.

public class Harmonic{
  public static void main(String[] args){
    double sum = 0;
    for(int i=1; i<=5000; i++){
      sum+=1/i;
    }
    System.out.println(sum);
  }
}
Run Code Online (Sandbox Code Playgroud)

java double

2
推荐指数
3
解决办法
2184
查看次数

如何在for循环中传递整数值2 ^ 62 -1

我怎么可能实际指定迭代器值大于int的最大大小的for循环?

即我想循环2 ^ 62 -1次.

编辑:2 ^ 62 -1

java int for-loop

2
推荐指数
1
解决办法
168
查看次数

在Array中从ArrayList <String []>更改为String [] []

改变ArrayList<String[]>String[][]/Object[][]桌面的最简单方法是什么?

我尝试使用size()方法,但这种类型的列表没有简单的方法get().

感谢帮助.

_rowTable[j][0] = new String[_listSelect.size()][columnCount];

for(int j=0; j < _listSelect.size(); j++)
 //   for(int k=0; k < columnCount; k++)
        _rowTable[j][0] = _listSelect.get(0);
Run Code Online (Sandbox Code Playgroud)

如何正确使用第二个循环?

java arraylist

2
推荐指数
1
解决办法
108
查看次数

未处理的异常:FileNotFoundException

我在java中读取文件时遇到一些问题:我的文件是例如:

3,4
2
6
4
1
7
3
8
9
Run Code Online (Sandbox Code Playgroud)

第一行3和4是数组A和B的长度,然后是每个数组的元素.我做的

import java.io.*;
import java.util.Arrays;

public class Progetto  {

    public static void main(String args[])
      {
// Open the file that is the first 
// command line parameter

            FileInputStream fstream = new FileInputStream("prova.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine = br.readLine(); // step 1

            if (strLine != null) {
              String[] delims = strLine.split(","); // step 2

              // step 3
              int[] a = new int[Integer.parseInt(delims[0])];
              int[] b = new int[Integer.parseInt(delims[1])]; …
Run Code Online (Sandbox Code Playgroud)

java bufferedreader

2
推荐指数
2
解决办法
1万
查看次数

如果我创建任意数量的String对象,JVM是否会耗尽PermGen空间?

假设我编写了一个程序,它创建了很多String对象和intern()它们:

String someString = param1 + param2;
someString.intern();
Run Code Online (Sandbox Code Playgroud)

这对于一小组字符串来说很好,但是如果我尝试创建十亿个字符串String呢?(或者说亿亿亿?)据我所知,JVM 在PermGen区域为s 维护一个常量池,而PermGen没有得到GC -ed.String

因此,如果我String在循环中创建了过多的对象,但是我删除了对它们的引用,那么它们将得到GC -ed(我将用尽PermGen空间)吗?这些String都是独一无二的,没有任何重复.

java memory string jvm permgen

2
推荐指数
1
解决办法
254
查看次数

在java中以MB读取大文件的最佳方法

我正在阅读帖子,它说使用BufferedReader或MappedByteBuffer.我决定用291.0 MB文件自己测试,但仍然无法决定

    BufferedReader reader = new BufferedReader(new FileReader("/Users/rachana/part-00000"));
    String line = null;
    while((line = reader.readLine())!=null) {
        System.out.println(line);
    }


    ~~~~~~ Heap utilization in MB ~~~~~~
    Start Date  21:10:20
    End Date 21:17:48
    Time used 448 second
           7.50 min
    Used Memory In MB:28
    Free Memory:81
    Total Memory:109
    Max Memory:1820
Run Code Online (Sandbox Code Playgroud)

使用MappedByteBuffer

RandomAccessFile aFile = new RandomAccessFile
                ("/Users/rachana/part-00000", "r");
        FileChannel inChannel = aFile.getChannel();
        MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
        buffer.load(); 
        for (int i = 0; i < buffer.limit(); i++)
        {
            System.out.print((char) buffer.get());
        }
        buffer.clear(); // …
Run Code Online (Sandbox Code Playgroud)

java performance file-io memory-mapped-files

2
推荐指数
1
解决办法
2333
查看次数

为什么java在jvm public中保留了length字段

这是一个例子:

int[] a = {10};
int x = a.length;
Run Code Online (Sandbox Code Playgroud)

我们不断阅读以隐藏变量并使用访问器.为什么这条规则违反了?

java oop jvm

2
推荐指数
1
解决办法
79
查看次数