source

Java 32비트 및 64비트 호환성

factcode 2022. 9. 25. 00:14
반응형

Java 32비트 및 64비트 호환성

32비트 JDK에 대해 빌드되어 32비트 바이트 코드로 컴파일된 Java 코드가 64비트 JVM에서 작동합니까?아니면 64비트 JVM에 64비트 바이트 코드가 필요합니까?

<?php $myvalue = 'Test me more'; ?>

좀 더 자세히 설명하자면 32비트 JVM을 실행하는 Solaris 환경에서 동작하던 코드가 있는데 JDK와 Weblogic 서버를 64비트로 업그레이드한 후 문제가 발생합니다.Test Java 코드 소스 코드하지 않는라이브러리를 로 하고 있습니다. 32번 64번

실수로 32비트 VM이 아닌 64비트 VM에서 대규모 애플리케이션을 실행했는데, 일부 외부 라이브러리(JNI에서 호출)에서 장애가 발생하기 시작할 때까지 알아차리지 못했습니다.

Test me more

32비트 플랫폼에서 시리얼화된 데이터는 64비트 플랫폼에서 문제없이 읽혀졌습니다.

<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>

어떤 문제가 발생하고 있습니까?효과가 있는 것도 있고 없는 것도 있나요?J콘솔 등을 장착해 보고, 피크 부근을 해 본 적이 있습니까?

VM이 매우 큰 경우 64비트의 GC 문제가 영향을 미칠 수 있습니다.

$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test

첫 번째 질문에는 예, 두 번째 질문에는 아니오입니다.이것은 가상 머신입니다.이 문제는 버전 간의 라이브러리 구현에서 지정되지 않은 변경과 관련이 있을 수 있습니다.레이스 상태일 수도 있지만요

$sentence = 'Hello World this is PHP';
$abbreviation = explode(' ', trim($sentence ))[0];
echo $abbreviation // will print Hello

VM이 거쳐야 하는 몇 가지 홉이 있습니다.특히 참조는 클래스 파일에서 다음과 같은 공간을 차지하는 것처럼 처리됩니다.

$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);

스택상에 있습니다. $myvalue ★★★★★★★★★★★★★★★★★」strstr2년 전예를 들어 필드의 경우 VM이 일반적으로 수행되는 재배치가 있습니다.이것은 모두 (상대적으로) 투명하게 행해진다

echo strstr( $myvalue . ' ', ' ', true );

또한 일부 64비트 JVM은 "compressed oops"를 사용합니다.데이터는 8바이트 또는 16바이트마다 정렬되기 때문에 주소의 3~4비트는 쓸모가 없습니다(단, 알고리즘에 따라서는 「마크」비트가 도난당할 가능성이 있습니다).이를 통해 32비트주소 데이터(따라서 대역폭의 절반 사용, 즉 고속)는 64비트플랫폼에서 35비트 또는 36비트의 힙사이즈를 사용할 수 있습니다.

모든 바이트 코드는 8비트 기반입니다.(그래서 바이트 코드라고 부릅니다) 모든 명령어는 8비트의 배수로 되어 있습니다.델은 32비트 머신으로 개발하여 64비트 JVM으로 서버를 실행하고 있습니다.

$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );

Or using explode, which has so many answers using it I won't bother pointing out how to do it.

You could do

echo current(explode(' ',$myvalue));

Even though it is little late, but PHP has one better solution for this:

$words=str_word_count($myvalue, 1);
echo $words[0];

Similar to accepted answer with one less step:

$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];

//$first_word == 'Test'

Just in case you are not sure the string starts with a word...

$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test
<?php
  $value = "Hello world";
  $tokens = explode(" ", $value);
  echo $tokens[0];
?>

Just use explode to get every word of the input and output the first element of the resulting array.

Using split function also you can get the first word from string.

<?php
$myvalue ="Test me more";
$result=split(" ",$myvalue);
echo $result[0];
?>
$string = ' Test me more ';
preg_match('/\b\w+\b/i', $string, $result); // Test
echo $result;

/* You could use [a-zA-Z]+ instead of \w+ if wanted only alphabetical chars. */
$string = ' Test me more ';
preg_match('/\b[a-zA-Z]+\b/i', $string, $result); // Test
echo $result;

Regards, Ciul

strtok 보다 빠르다extract또는 기능.

$input = "Test me more";
echo preg_replace("/\s.*$/","",$input); // "Test"

개인적으로strsplit/explode/strtok는 단어의 경계를 지원하지 않기 때문에 보다 적절한 분할을 얻으려면 정규 표현을 와 함께 사용합니다.\w

preg_split('/[\s]+/',$string,1);

This would split words with boundaries to a limit of 1.

각각의 함수가 얼마나 빠른지 알고 싶다면, 저는 PHP 7.3에서 가장 많이 투표된 6개의 답변에 대한 대략적인 벤치마킹을 실행했습니다.strpos와 함께substr,explode와 함께current,strstr,explode와 함께trim,str_word_count그리고.strtok100만 번 반복하여 속도를 비교합니다.

<?php

$strTest = 'This is a string to test fetching first word of a string methods.';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    $p = strpos($strTest, ' ');
    $p !== false ? $strTest : substr( $strTest, 0, $p );
}
$after = microtime(true);
echo 'strpos/ substr: '.($after-$before)/$i . ' seconds<br>';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    strstr($strTest, ' ', true);
}
$after = microtime(true);
echo 'strstr: '.($after-$before)/$i . ' seconds<br>';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    current(explode(' ',$strTest));
}
$after = microtime(true);
echo 'explode/ current: '.($after-$before)/$i . ' seconds<br>';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    $arr = explode(' ',trim($strTest));
    $arr[0];
}
$after = microtime(true);
echo 'explode/ trim: '.($after-$before)/$i . ' seconds<br>';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    str_word_count($strTest, 1);
}
$after = microtime(true);
echo 'str_word_count: '.($after-$before)/$i . ' seconds<br>';

$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
    strtok($value, ' ');
}
$after = microtime(true);
echo 'strtok: '.($after-$before)/$i . ' seconds<br>';

?>

Here are the varying results from 2 consecutive runs:

strpos/ substr: 6.0736894607544E-8 seconds
strstr: 5.0434112548828E-8 seconds
explode/ current: 3.5163116455078E-7 seconds
explode/ trim: 3.8683795928955E-7 seconds
str_word_count: 4.6665270328522E-6 seconds
strtok: 4.9849510192871E-7 seconds

strpos/ substr: 5.7171106338501E-8 seconds
strstr: 4.7624826431274E-8 seconds
explode/ current: 3.3753299713135E-7 seconds
explode/ trim: 4.2293286323547E-7 seconds
str_word_count: 3.7025549411774E-6 seconds
strtok: 1.2249300479889E-6 seconds

And the results after inverting the order of the functions:

strtok: 4.2612719535828E-7 seconds
str_word_count: 4.1899878978729E-6 seconds
explode/ trim: 9.3175292015076E-7 seconds
explode/ current: 7.0811605453491E-7 seconds
strstr: 1.0137891769409E-7 seconds
strpos/ substr: 1.0082197189331E-7 seconds

결론 이러한 기능 간의 속도는 매우 다양하며 테스트 실행 간에 예상만큼 일관되지 않는 것으로 나타났습니다.이러한 빠르고 더러운 테스트에 따르면 선택된 6가지 기능 중 어느 것이든 합리적인 시간 내에 작업을 완료할 수 있습니다.실행 시간을 방해하는 다른 프로세스를 포함한 섭동이 있습니다.따라서 프로그래머로서 가장 실용적이고 읽기 쉬운 기능을 사용하십시오.더 큰 프로그래밍 그림을 보려면 Donald KnuthLiterate Programming을 참조하십시오.

$first_word = str_word_count(1)[0]

특수 문자에서는 작동하지 않으며 특수 문자가 사용될 경우 잘못된 동작이 발생합니다.UTF-8이 아닙니다.

자세한 내용은 PHP str_word_count() 멀티바이트가 안전한지 확인하십시오.

질문은 "문자열의 첫 번째 공백과 그 뒤에 이어지는 모든 것을 아무것도 입력하지 않음"으로 재구성할 수 있습니다.따라서 이것은 간단한 정규 표현으로 달성할 수 있습니다.

$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));

안전을 위해 ltrim()에 옵션콜을 추가했습니다.이 함수는 문자열 선두에 있는 공간을 삭제합니다.

언급URL : https://stackoverflow.com/questions/2476789/how-to-get-the-first-word-of-a-sentence-in-php

반응형