小编Rol*_*lig的帖子

用于分析大型Java堆转储的工具

我有一个我想分析的HotSpot JVM堆转储.VM运行时-Xmx31g,堆转储文件大48 GB.

  • 我甚至不会尝试jhat,因为它需要大约五倍的堆内存(在我的情况下将是240 GB)并且非常慢.
  • Eclipse MAT ArrayIndexOutOfBoundsException在分析堆转储几个小时后崩溃.

还有哪些其他工具可用于该任务?一套命令行工具是最好的,包括一个程序,它将堆转储转换为高效的数据结构进行分析,并与其他几个处理预结构化数据的工具相结合.

java profiling

73
推荐指数
5
解决办法
7万
查看次数

如何捕获JNI/Java异常

我的应用程序中有一个JNI层.在某些情况下,Java会抛出异常.如何在JNI层中获取Java异常?我的代码如下所示.

if((*(pConnDA->penv))->ExceptionCheck(pConnDA->penv))
{
    (*(pConnDA->penv))->ExceptionDescribe(pConnDA->penv); 
    (*(pConnDA->penv))->ExceptionClear(pConnDA->penv);
}
Run Code Online (Sandbox Code Playgroud)

这个代码块是否只捕获JNI异常?将在控制台(stderr)中记录异常描述的位置?如何将其插入缓冲区,以便将其传递给记录器模块?

java-native-interface

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

Java:如何有效地检查空指针

有一些模式用于检查方法的参数是否已null赋值.

首先是经典之作.它在自制代码中很常见,并且很明显可以理解.

public void method1(String arg) {
  if (arg == null) {
    throw new NullPointerException("arg");
  }
}
Run Code Online (Sandbox Code Playgroud)

其次,您可以使用现有框架.该代码看起来更好一点,因为它只占用一行.缺点是它可能会调用另一个方法,这可能会使代码运行得慢一些,具体取决于编译器.

public void method2(String arg) {
  Assert.notNull(arg, "arg");
}
Run Code Online (Sandbox Code Playgroud)

第三,你可以尝试调用一个没有副作用的方法.这可能看起来很奇怪,但它比上述版本的令牌更少.

public void method3(String arg) {
  arg.getClass();
}
Run Code Online (Sandbox Code Playgroud)

我没有看到广泛使用的第三种模式,感觉就像我自己发明了它一样.我喜欢它的简洁性,因为编译器很有可能完全优化它或将其转换为单个机器指令.我还用行号信息编译我的代码,所以如果NullPointerException抛出一个,我可以追溯到确切的变量,因为我每行只有一个这样的检查.

您更喜欢哪种支票,为什么?

java optimization coding-style nullpointerexception

23
推荐指数
4
解决办法
3万
查看次数

Tomcat 6中的Quartz调度程序,线程不会停止

对于我的webapp,我使用Quartz.当我部署应用程序时,一切正常.当我取消部署应用程序时,Quartz线程不会被销毁.

日志是:

信息:停止服务Catalina

严重:Web应用程序[/ example]似乎已经启动了一个名为[DefaultQuartzScheduler_Worker-1]的线程,但未能阻止它.这很可能造成内存泄漏.2010年7月12日下午6:30:40 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

任何人都可以告诉我如何强制这些线程的销毁行动?

谢谢,

托马索

java quartz-scheduler tomcat6

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

为prolog阅读多个单词

我在unix上通过poplog运行prolog,并想知道是否有一种方法可以读取多个单词(例如将其包装成字符串).例如,read(X)只允许X为1个术语.但是,如果我用""包含用户输入,它将返回一个字符代码列表,这是正确的方法,因为我找不到将其转换回可读字符串的方法.

我还希望能够看到多重字符串是否包含设定值(例如,如果它包含"我已经"),并且我不确定我将如何能够做到这一点.

input prolog

11
推荐指数
1
解决办法
3783
查看次数

自动检查std :: vector中的边界

在使用的类的主动开发期间std::vector,通常会发生索引超出范围.(有关实际示例,请参阅此代码复习问题.)使用时operator[],会导致未定义的行为.尽管如此,[]语法易于阅读比写作更方便.at().

因此,我想使用[]运算符编写代码,但同时启用了边界检查.在测试代​​码之后,应该很容易删除边界检查.

我在考虑以下代码:

util::bound_checked<std::vector<int>> numbers;

numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
numbers.push_back(4);
std::cout << numbers[17] << "\n";
Run Code Online (Sandbox Code Playgroud)

对我来说,这个实用程序模板似乎是如此简单,我希望它存在.可以?如果是这样,以哪个名字?

c++ stdvector undefined-behavior

11
推荐指数
2
解决办法
766
查看次数

使用 crypto/rand 通过 rand.Perm 生成排列

Go 有两个随机数包:

  • crypto/rand,它提供了一种获取随机字节的方法
  • math/rand,它有一个很好的打乱整数的算法

我想使用Perm中的算法math/rand,但为其提供高质量的随机数。

由于这两个rand包是同一标准库的一部分,因此应该有一种方法将它们组合起来,以便crypto/rand提供用于math/rand.Perm生成排列的良好随机数源。

这里(以及Playground上)是我编写的用于连接这两个包的代码:

package main

import (
    cryptoRand "crypto/rand"
    "encoding/binary"
    "fmt"
    mathRand "math/rand"
)

type cryptoSource struct{}

func (s cryptoSource) Int63() int64 {
    bytes := make([]byte, 8, 8)
    cryptoRand.Read(bytes)
    return int64(binary.BigEndian.Uint64(bytes) >> 1)
}

func (s cryptoSource) Seed(seed int64) {
    panic("seed")
}

func main() {
    rnd := mathRand.New(&cryptoSource{})
    perm := rnd.Perm(52)
    fmt.Println(perm)
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效。理想情况下,我不想cryptoSource自己定义类型,而只是将两个rand包粘在一起,以便它们一起工作。那么是否有这种类型的预定义版本cryptoSource

random go

8
推荐指数
1
解决办法
1128
查看次数

在Tomcat中自动检测URI编码

我有一个运行Apache Tomcat 6.x的实例,我希望它能够解释传入URL的字符集比默认行为更加智能.特别是,我想实现以下映射:

So%DFe => Soße
So%C3%9Fe => Soße
So%DF%C3%9F => (error)
Run Code Online (Sandbox Code Playgroud)

我想要的bevavior可以被描述为"尝试将字节流解码为UTF-8,如果它不起作用则假设ISO-8859-1".

URIEncoding在这种情况下,仅使用配置不起作用.那么如何配置Tomcat以我想要的方式对请求进行编码呢?

我可能必须编写一个过滤器来接收请求(尤其是查询字符串)并将其重新编码为参数.这是自然的方式吗?

java tomcat character-encoding url-encoding servlet-filters

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

使用 char 参数从 &lt;cctype&gt; 调用函数是否安全?

C 编程语言表示,这些函数<ctype.h>遵循一个共同的要求:

ISO C99,7.4p1:

在所有情况下,参数都是 an int,其值应表示为 anunsigned char或应等于宏的值EOF。如果参数有任何其他值,则行为未定义。

这意味着以下代码是不安全的:

int upper(const char *s, size_t index) {
  return toupper(s[index]);
}
Run Code Online (Sandbox Code Playgroud)

如果此代码在char具有相同值空间的实现上执行,signed char并且字符串中有一个具有负值的字符,则此代码调用未定义行为。正确的版本是:

int upper(const char *s, size_t index) {
  return toupper((unsigned char) s[index]);
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还是在 C++ 中看到了许多不关心这种未定义行为可能性的例子。那么 C++ 标准中是否有任何内容可以保证上述代码不会导致未定义的行为,或者所有示例都是错误的?

【附加关键词:ctype cctype isalnum isalpha isblank iscntrl isdigit isgraph islowwer isprint ispunct isspace isupper isxdigit tolower]

c c++ character undefined-behavior language-lawyer

7
推荐指数
1
解决办法
1044
查看次数

使用&符编码URL组件&

这似乎是一个非常简单的问题:

我有一个程序,有人M&S在表单中输入字符串并运行查询.我理解这&是一个保留字符,因此必须编码.问题是它似乎需要在某些情况下编码两次.

如果在javascript onClick事件中使用URL ,则正常的URL编码似乎工作正常(此处操作员可以单击列标题进行排序):

<td onClick="AJAX_Get('http://10.0.0.195/program.exe?Qry147=M%26S&sortmethod1=161')">
Run Code Online (Sandbox Code Playgroud)

但是,如果URL在锚中使用(尽管锚实际上使用了AJAX),它似乎需要编码两次:

<a href="javascript:AJAX_Get('http://10.0.0.195/program.exe?Qry147=M%2526S&sortmethod1=147')" title='Refresh'>Refresh</a>
Run Code Online (Sandbox Code Playgroud)

上面的两个例子都可以正常工作.但它们是手工生成的测试用例.不幸的是,在应用程序中,当我实际生成URL时,我不知道它将如何使用.

如果我对URL参数编码一次(M%26S),它可以正常工作onClick.但是在锚中使用这种方式,服务器将URL视为...Qry147=M&S&sortmethod1=147...- 因此在返回服务器之前它必须是未编码的.

如果我对它进行两次编码(M%2526S),则锚点可以工作,但是对于onClick服务器,它会看到...Qry147=M%2526S....

我觉得我在这里错过了一些东西.在这两种情况下,有没有办法使这项工作相同?

html javascript url encoding

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